javascript - 将 JS 正则表达式转换为不使用lookbehind
问题描述
在我从事的 Web 项目开发的早期,我创建了这个正则表达式/(?<!\\)\w?\$.+?(?<!\\)\$/
,$ any text here$
只要第一个和最后一个$
前面没有\
.
此处显示了一些示例https://regex101.com/r/Y1Uml9/1/
正则表达式完美运行,直到我意识到 iOS Safari 和 Chrome 不支持后视。我尝试自己修改正则表达式,但我的基本正则表达式技能无法生成有效的正则表达式。
有什么建议如何转换正则表达式使其在 iOS 上工作?
解决方案
您可以使用
/((?:^|[^\\])(?:\\\\)*)\$([^\\$]*(?:\\[\w\W][^\\$]*)*)\$/g
请参阅正则表达式演示。
基本上,捕获“实际”匹配之前的部分,捕获替换时需要保留的匹配部分。
详情:
((?:^|[^\\])(?:\\\\)*)
- 第 1 组:字符串开头或除双反斜杠之外的任何字符\
,然后是零次或多次重复\$
- 一个$
字符([^\\$]*(?:\\[\w\W][^\\$]*)*)
- 第 2 组:[^\\$]*
\
- 除了and之外的零个或多个字符$
(?:\\[\w\W][^\\$]*)*
- 零次或多次重复\\[\w\W]
- a\
后跟任何字符[^\\$]*
\
- 除了and之外的零个或多个字符$
\$
- 一个$
字符
查看 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>>') );
推荐阅读
- c# - 未针对特定表名解析表名
- python - Flink Streaming Python API - reduce() 产生增量结果而不是最终值
- c++ - “偶尔”的分段错误
- magento-1.9 - 在 magento 中自定义页眉和页脚
- java - 如何使用http从Java后端在Angular前面显示一些数据
- java - 对 JBoss 中配置的 JMS 队列执行 JNDI 查找时出现问题
- javascript - 失败的断言不会使 nightwatch 中的当前测试用例失败
- nativescript - NativeScript 角度 nativeView 未定义
- django - Django中可选嵌套模型的方法
- ssas - 将未知成员应用于具有多对多关系的不同度量值组