在我从事的 Web 项目开发的早期,我创建了这个正则表达式 /(?<!\\)\w?\$.+?(?<!\\)\$/
旨在匹配 $ any text here$
只要第一个和最后一个$
前面没有 \
.
此处显示了一些示例 https://regex101.com/r/Y1Uml9/1/
在我意识到 iOS Safari 和 Chrome 不支持 lookbehinds 之前,正则表达式工作得很好。我尝试自己修改正则表达式,但我的基本正则表达式技能无法生成有效的正则表达式。
关于如何转换正则表达式以使其在 iOS 上运行有什么建议吗?
最佳答案
你可以使用
/((?:^|[^\\])(?:\\\\)*)\$([^\\$]*(?:\\[\w\W][^\\$]*)*)\$/g
参见 regex demo .
基本上,捕获“实际”匹配之前的部分,捕获替换时需要保留的匹配部分。
详细信息:
-
((?:^|[^\\])(?:\\\\)*)
- 第 1 组:字符串开头或除\
以外的任何字符然后重复零次或多次双反斜杠 -
\$
- 一个$
字符 -
([^\\$]*(?:\\[\w\W][^\\$]*)*)
- 第 2 组:-
[^\\$]*
- 除\
以外的零个或多个字符和$
-
-
(?:\\[\w\W][^\\$]*)*
- 零次或多次重复-
\\[\w\W]
- 一个\
后跟任何字符 -
[^\\$]*
- 除\
以外的零个或多个字符和$
-
-
\$
- 一个$
字符
查看 JavaScript 演示:
const regex = /((?:^|[^\\])(?:\\\\)*)\$([^\\$]*(?:\\[\w\W][^\\$]*)*)\$/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>>') );
关于javascript - 将 JS 正则表达式转换为不使用 lookbehind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66968968/