gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:02:17 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com