【发布时间】:2021-07-23 17:01:24
【问题描述】:
目标
目标是匹配 JavaScript 中没有特定分隔符的字符串,即两个字符之间的字符串(字符可以包含在匹配中)。
例如,此字符串应完全匹配:$ test string $。这可以出现在字符串中的任何位置。这将是微不足道的,但是,我们希望允许转义语法,例如The price is 5\$ to 10\$.
总结:
- 匹配任何由两个
$符号括起来的字符串。 - 如果使用
\$转义美元符号,则不要匹配它。
使用否定后向的解决方案
完美实现这一目标的解决方案是:(?<!\\)\$(.*?)(?<!\\)\$。
问题
此解决方案使用 negative lookbehind,Safari 不支持。如何在不使用否定后视(即在 Safari 上)的情况下实现相同的匹配?
部分有效的解决方案是(?<!\\)\$(.*?)(?<!\\)\$。但是,如果$ 符号前面的字符不是\,这也会匹配它。
【问题讨论】:
-
这最终是否是一个 JavaScript 问题,或者如果不是,那么这里使用的语言是什么?
-
为什么不使用简单的
/\$([^$]+)\$/? -
@TimBiegeleisen 是的,我应该指定 - JavaScript。这也是它不能在 Safari 上运行的原因。
-
@Akxe 这仍然会匹配
$foo\$,但更糟糕的是,它将匹配\$bar$($bar$将匹配不带反斜杠)。目标是在使用反斜杠转义美元符号时匹配字符串。 -
好吧...那为什么不
\\\$([^$]+)\\\$?然后只需从那里提取您想要的组...
标签: javascript regex safari regex-negation