2012-01-26 121 views
2

我从另一个开发人员继承了这个JavaScript正则表达式,现在,即使没有任何变化,它似乎并不匹配所需的文本。下面是正则表达式:为什么在输入包含换行符时正则表达式失败?

/^.*(already (active|exists|registered)).*$/i 

我需要它看起来像

东西的东西已经存在更多的东西的任何文本匹配等

它看起来完全没有给我,只一起查找这两个单词,理论上应该忽略字符串的其余部分。在我的剧本我检查这样

var cardUsedRE = /^.*(already (active|exists|registered)).*$/i; 
if(cardUsedRE.test(responseText)){ 
    mdiv.className = 'userError'; 
    mdiv.innerHTML = 'The card # has already been registered'; 
    document.getElementById('cardErrMsg').innerHTML = arrowGif; 

文本}

我已经通过这个加强在Firebug,我已经看到了它无法检验这个字符串:

> Error: <detail>Card number already registered for CLP.\n</detail> 

上午我遗漏了什么?这有什么可能的问题?

+0

'.'不会默认匹配换行符。 “\ s +” – 2012-01-26 23:32:25

+0

不确定是否相关,但它看起来像你的JavaScript有一个错字与mdiv.innerHTML = – JayC 2012-01-26 23:34:19

+1

我也同意pst。我不知道为什么你甚至有^。*和。* $比特,除非这是一个提醒,当整个字符串需要匹配某些东西时,它会被锚定到开始和结束。 – JayC 2012-01-26 23:40:38

回答

3

这里有一个简单但功能等价的正则表达式应该处理换行符:

/(already\s+(active|exists|registered))/i

不知道为什么你会永远想^.*领导或.*$结束,除非你的目标是明确防止换行符。否则,这只是多余的。

编辑:我更换了空间\s+所以这将是它是如何处理空白(例如一个空间,两个空间,一个标签等应全部匹配),更自由。

+1

谢谢你解决了这个问题。 – Rondel 2012-01-27 15:23:45

2

tldr;使用m修饰符可使.与换行符匹配。请参阅MDC regular expression documentation

失败(请注意字符串字面中的 “\ n”):

var str = "Error: <detail>Card number already registered for CLP.\n</detail>" 
str.match(/^.*(already (active|exists|registered)).*$/i) 

工作(注意m标志的. “多线” 的行为):

var str = "Error: <detail>Card number already registered for CLP.\n</detail>" 
str.match(/^.*(already (active|exists|registered)).*$/mi) 

我会然而:使用更简单的形式:(调整“空间”的定义)

var str = "Error: <detail>Card number already registered for CLP.\n</detail>"; 
str.match(/(?:already\s+(?:active|exists|registered))/i) 

快乐编码。

+0

感谢您的额外信息。我没有意识到换行会导致其他问题 – Rondel 2012-01-27 15:24:16

相关问题