如何查找与正则表达式组不匹配的所有行

时间:2013-06-25 02:40:20

标签: javascript regex regex-negation

根据此post,我尝试使用^.*(?!http).*$查找所有不包含字符串http的行,但没有运气。

TEXT:

"NetworkError: 404 Not Found - http://wap-uat01.webuat.opg/finance/img/arrow.gif"
arrow.gif
GET http://wap-uat01.webuat.opg/site/brknews/xml/focus/focus_finance.xml?dummy=1372124875337
404 Not Found
        19ms    
xui-2.0.0.js(1221 line)
GET http://wap-uat01.webuat.opg/site/fin/xml/delay/topten/topStock_stock_up.xml?dummy=1372124875339
404 Not Found
        23ms    
xui-2.0.0.js(1221 line)
GET http://wap-uat01.webuat.opg/site/fin/xml/delay/topten/topStock_stock_down.xml?dummy=1372124875341
404 Not Found
        22ms    
xui-2.0.0.js(1221 line)
GET http://wap-uat01.webuat.opg/site/fin/xml/hotStock/fin_hotstock_utf8.xml?dummy=1372124875342
404 Not Found
        27ms    
xui-2.0.0.js(1221 line)
GET http://wap-uat01.webuat.opg/site/fin/xml/delay/index/u_HSI.xml?dummy=1372124875343
404 Not Found
        32ms    
xui-2.0.0.js(1221 line)
GET http://wap-uat01.webuat.opg/site/fin/xml/delay/index/u_HSCEI.xml?dummy=1372124875345
404 Not Found
        32ms    
xui-2.0.0.js(1221 line)
GET http://wap-uat01.webuat.opg/site/xml/polling.xml?dummy=1372124875346

这个问题有什么想法吗?感谢。

现场演示: http://regexr.com?35b85

1 个答案:

答案 0 :(得分:1)

首先,要以您正在寻找的方式对其进行测试,请启用“多线”模式。 ^字符表示所有文本的开头。 (并且如果没有dotall,.*序列将不会越过新行,但是在启用多行模式时,您不需要dotall。)

我认为这个表达式应该做你想要的,但它不适用于那个页面(我的猜测是因为突出显示换行符的问题):

^(?!.*?http).*$

然而,它在这里工作:

alert(
    /^(?!.*?http).*$/gm.exec('abhttpc\nq')
)

如果您不想要空行,可以用以下内容替换上面的正则表达式:

^(?!.*?http).+$

这会显示您可能正在寻找的结果:http://regexr.com?35b8h

我们的表达式之间的区别在于你的表达式允许表达式找到任何数量的字符,这些字符后面没有“http”,然后是任意数量的字符。所以,对于这一行:

"NetworkError: 404 Not Found - http://wap-uat01.webuat.opg/finance/img/arrow.gif"

......你的表达

^.*(?!http).*$

......如果没有遇到http之后就会尽可能远,即"NetworkError: 404 Not Found -(即在空间之前停止)并接受,然后继续最后{ {1}}代码(即以空格开头的代码),一直到行尾。

但是,在我修改过的代码中,它排除了在行开头后可以在任何地方找到“http”的情况,然后,如果不能,则它包括所有字符,直到结果中的行结束(记住http://wap-uat01.webuat.opg/finance/img/arrow.gif"检查实际上并没有消耗任何字符):

(?!...)