我正在开发自己的 JavaScript 库以支持正则表达式的新元字符和功能,我想找到一个[^xy]
不等同于(?!x).
(或更具体地说(?:(?!x|y).)
)的情况。
以示例文本为例:"abc\n"
假设我想模拟 Perl 正则表达式:/\A.{3}\Z/s
使用单行标志,JavaScript 正则表达式应该等价于:/^[\s\S]{3}\n*$(?!\s)/
( \A
become ^
, .
become [\s\S]
, \Z
become \n*$(?!\s)
)
现在,/^.{3}$/
会失败,但/^[\s\S]{3}\n*$(?!\s)/
会捕获“abcabc”(与 Perl 正则表达式相同)
由于\Z
包含的不仅仅是元字符,因此模拟[^\Z]
似乎更加困难。
以示例文本为例:"abcabc\n"
为 Perl 正则表达式提议的 JavaScript 正则表达式/.{3}[^\Za]/g
将是.{3}(?:(?!\n*$(?!\s)|a).)/g
两者都会匹配"bcab"
所以,最后,我再次提出这个问题。是否存在[^xy]
不等同于(?:(?!x|y).)
这种情况的情况,也许在更复杂的正则表达式中,前瞻会改变情况?