【发布时间】:2013-06-27 20:31:01
【问题描述】:
我正在开发自己的 JavaScript 库以支持正则表达式的新元字符和功能,我想找到[^xy] 不等于(?!x).(或更具体地(?:(?!x|y).))的情况.
以文本为例:"abc\n"
假设我想模拟一个 Perl 正则表达式:/\A.{3}\Z/s
使用单行标志,JavaScript 正则表达式应该相当于:/^[\s\S]{3}\n*$(?!\s)/(\A 变为 ^,. 变为 [\s\S],\Z 变为 \n*$(?!\s))
现在,/^.{3}$/ 会失败,但/^[\s\S]{3}\n*$(?!\s)/ 会捕获“abcabc”(与 Perl 正则表达式相同)
由于\Z 不仅仅包含一个元字符,模拟[^\Z] 似乎更困难。
以文本为例:"abcabc\n"
Perl 正则表达式 /.{3}[^\Za]/g 的建议 JavaScript 正则表达式将是 .{3}(?:(?!\n*$(?!\s)|a).)/g
两者都将匹配"bcab"
所以,最后,我再次提出这个问题。在这种情况下,是否存在[^xy] 不等于(?:(?!x|y).) 的情况,也许是在一个更复杂的正则表达式中,前瞻会改变这种情况?
【问题讨论】:
-
/^[\s\S]{3}\n*$(?!\s)/.exec("abcabc\n")不适合我,也没有按照您的建议提供abcabc -
perl 正则表达式
/\A.{3}\Z/s也不匹配"abcabc\n",正如您所声称的那样...... -
正确。我改变了一些东西,忘了编辑它们。第一个场景使用文本“abc\n”,第二个场景使用文本“abcabc\n”。我已经对主帖进行了编辑。
-
[^\Z]不是一个东西,因为\Z不是一个字符。
标签: javascript regex