匹配不包含片段的字符串 - 使用regexp

时间:2014-10-06 08:37:18

标签: javascript regex

我有一个文件(基本上是一个日志文件) - 其中包含以下几行:

Error; 1 no match CIRCLE more.
Info; 2 should not match
Error; 3 should : match SHAPE 'abc'.
Debug; 4 should not match
Error; 5 CIRCLE / again
Error; 6 TRIANGLE should match

我想查找/匹配所有以'错误开头的完整行;'但是没有一句话' CIRCLE'在那条线上。所以我想找到第3和第6行:

Error; 3 should : match SHAPE 'abc'.
Error; 6 TRIANGLE should match

我从(Error;).+开始的模式给了我所有的错误'线条,但我不知道如何排除CIRCLE。应该是使用[^ ... ]或者我认为是先行的非常基本的东西。

我在网上玩这个游戏:http://regexr.com/39kig

2 个答案:

答案 0 :(得分:3)

^Error(?!.*?circle).*$

试试这个。不要忘记设置img标记。请参阅演示。

http://regex101.com/r/hQ1rP0/17

答案 1 :(得分:2)

使用以下使用negative lookahead的正则表达式。如果正则表达式包含锚点( ^ - 表示行的开头,$ - 表示行的结尾,请不要忘记添加多行修饰符。

^Error;(?!.*?CIRCLE).*$

DEMO

> var r = "Error; 1 no match CIRCLE more.\nInfo; 2 should not match\nError; 3 should : match SHAPE 'abc'.\nDebug; 4 should not match\nError; 5 CIRCLE / again\nError; 6 TRIANGLE should match";
undefined
> var m = r.match(/^Error;(?!.*?CIRCLE).*$/gm)
undefined
> console.log(m)
[ 'Error; 3 should : match SHAPE \'abc\'.',
  'Error; 6 TRIANGLE should match' ]