javascript - 将 JS 正则表达式转换为不使用 lookbehind

标签 javascript regex

在我从事的 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/

相关文章:

javascript - 使用条件运算符运行多个语句将不起作用

javascript - 使用数学运算符循环对字符串数组(内部有数字)执行数学运算

javascript - 简单的时钟不能正常工作

javascript - jQuery 用数组替换

python - 如何返回匹配某些文本的正则表达式?

c# - 查找所有包含 + 的字符

当div扩展页面高度时javascript覆盖不覆盖整个页面

javascript - 根据子绝对div调整父div高度

python - 使用正则表达式过滤 pandas

javascript - 如何通过 javascript 将所有 href 链接附加到重定向器 url