2010-04-04 93 views

回答

17

我不明白为什么这个代码不上吧

foo换成因为点.明确不匹配换行符。

这会工作:

"foo\r\nbar".replace(/foo[\s\S]+/m, "bar") 

因为换行符计为空白(\s)。

请注意,foo附近的括号是多余的,分组在这里没有好处。

+0

谢谢,我不知道。在红宝石它默认情况下。 – 2010-04-04 20:37:11

+0

不,它不。 ;)(在http://rubular.com/上测试自己) – Tomalak 2010-04-04 20:44:18

+5

'[\ s \ S]'是一个比'(?:。| \ s)更好的解决方法';请参阅Erik Corry对此问题的回答,原因如下:http://stackoverflow.com/questions/2407870/javascript-regex-hangs-using-v8 – 2010-04-04 22:12:00

19

JavaScript不支持点全部修饰符。一个常见的更换:

"foo\r\nbar".replace(/(foo)[\s\S]+/, "bar") 

/m使得^$正确的行为,但.没有影响。

+1

太棒了。谢谢 – 2010-04-04 20:37:53