如何用正则表达式移除指定模式300x300以外的字符串内容?
解决方案
要通过String.replace()移除所有与“300x300”不匹配的字符,仅保留目标模式,有两种简洁的正则实现方式:
方法一:捕获目标并覆盖替换
这种方式逻辑直观且兼容性好,通过匹配整个字符串、捕获目标模式后,将整个内容替换为捕获到的目标:
const originalStr = "blahblah300x300dingding"; const targetStr = originalStr.replace(/^.*?(300x300).*$/, "$1"); // 输出结果:"300x300"
正则解析:
^匹配字符串起始位置.*?非贪婪匹配目标模式前的任意字符(避免过度匹配导致漏掉目标)(300x300)将目标模式标记为捕获组1.*匹配目标模式后的任意字符$匹配字符串结束位置
替换时用$1引用捕获到的目标内容,直接替换整个字符串。
方法二:匹配前后冗余内容并删除
利用正则断言精准定位目标模式前后的所有冗余字符,直接替换为空:
const originalStr = "blahblah300x300dingding"; const targetStr = originalStr.replace(/^.*(?=300x300)|(?<=300x300).*$/g, ""); // 输出结果:"300x300"
正则解析:
^.*(?=300x300)正向先行断言:匹配从字符串开头到“300x300”之前的所有字符(确保后面紧跟目标模式)(?<=300x300).*$反向后行断言:匹配从“300x300”之后到字符串结尾的所有字符(确保前面是目标模式)g全局匹配标记(保证所有冗余内容都被替换)
内容的提问来源于stack exchange,提问作者Oliver Kucharzewski
相关产品推荐
相关产品推荐

