使用'和'运算符的Perl / Javascript正则表达式

时间:2014-02-04 15:21:50

标签: javascript regex perl

我需要在文本中匹配不正确的反斜杠。以下文字是一个例子:

\.br\ Random Words \.br\\1 Testing\.br\2\ Check

所以\ .br \是正确的,但\ 1和2 \中的反斜杠不是。

所以我尝试使用正则表达式来匹配任何未跟随 .br 的\但是失败,因为它会匹配 \。br \ 中的结束\

然后我在stackoverflow上查找了一些类似的问题,其中大多数都说明了一系列的前瞻可以用作'和'运算符,所以我尝试了这个:

/(?!\\\.br)\\(?!\.br\\)/

我尝试做的是匹配任何既不是\ .br之前也没有后跟.br \的反斜杠,但它似乎不起作用。

任何帮助将不胜感激。我希望我没有错过这个问题的任何细节。

谢谢,

西特

3 个答案:

答案 0 :(得分:6)

关闭。 (?!PAT)表示“未跟PAT”。您希望“前面没有PAT”。

(?<!\\\.br)\\(?!\.br\\)

以下内容会更快一些:

\\(?<!\\\.br\\)(?!\.br\\)

答案 1 :(得分:2)

我会使用perl,并使用\G锚点和\K元字符(以及一些原子/占有部分来提高效率):

\G(?>\\\.br\\|[^\\]++)*+\K\\

它应该比使用lookarounds更快,因为没有重复的匹配(多次遍历相同的子字符串,这就是看起来像什么)。

regex101 demo

匹配分别以24步和21步完成(而不是使用36和22步的外观,加上4个失败的步骤)。

答案 2 :(得分:0)

(?:\\(?!\.br)\\)+(\S+)

上面的正则表达式将捕获不是.br。

的反斜杠内的那些字符

*请注意,\.br\2\中的数字2不会被捕获,因为.br \已正确输入。