将JS正则表达式转换为不使用lookbacking



在开发web项目的早期,我创建了这个正则表达式/(?<!\)w?$.+?(?<!\)$/,只要第一个和最后一个$前面没有,它就可以匹配$ any text here$

这里展示了几个例子https://regex101.com/r/Y1Uml9/1/

正则表达式运行得很好,直到我意识到iOS Safari和Chrome不支持lookbehinds。我试着自己修改正则表达式,但我的基本正则表达式技能无法生成有效的正则表达式。

有什么建议如何转换regex,使其在iOS上工作?

您可以使用

/((?:^|[^\])(?:\\)*)$([^\$]*(?:\[wW][^\$]*)*)$/g

请参阅regex演示。

基本上;实际的";匹配,捕捉替换时需要保留的匹配部分。

详细信息

  • ((?:^|[^\])(?:\\)*)-组1:字符串或除以外的任何字符的开头,然后重复零个或多个双反斜杠
  • $-一个$字符
  • ([^\$]*(?:\[wW][^\$]*)*)-第2组:
    • [^\$]*-除$之外的零个或多个字符
  • (?:\[wW][^\$]*)*-零次或多次重复
    • \[wW]-后面跟任意字符的
    • [^\$]*-除$之外的零个或多个字符
  • $-一个$字符

查看JavaScript演示:

const regex = /((?:^|[^\])(?:\\)*)$([^\$]*(?:\[wW][^\$]*)*)$/g;
const str = String.raw`$ some test here$
$ some text here with inner $ $
$ this should not be matched$`;
console.log( str.replace(regex, '$1<<START>>$2<<END>>') );

最新更新