我正在使用正则表达式来替换其他正则表达式中的(
,并将其替换为(?:
,以将它们转换为非匹配组。我的表达式假定不使用(?X
结构,并且看起来像这样:
(
[^\\] - Not backslash character
|^ - Or string beginning
)
(?:
[\(] - a bracket
)
不幸的是,在两个匹配项相邻的情况下,这种方法不起作用,就像在这种情况下一样:how((\s+can|\s+do)(\s+i)?)?
使用向后查找,解决方案很简单:
/(?<=[^\\]|^)[\(]/g
但是JavaScript不支持向后查找,那么我该怎么办呢? 我的搜索没有找到任何简单的通用的向后查找替代方案。
\u1234 ETHIOPIC SYLLABLE SEE
。 - Wiktor Stribiżew\u1234
这样的“不太可能”的字符——使用一个不是字符的unicode代码点——我现在使用\uFDD1
——来自unicode 私有使用区域。 - Stephen P