在开发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>>') );