我从其他开发者那里继承了这个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 :(得分:3)
这是一个简化但功能相同的正则表达式,应该处理换行符:
/(already\s+(active|exists|registered))/i
不确定为什么您希望以^.*
为导向或以.*$
结束,除非您的目标是专门用于阻止换行。否则它就是多余的。
编辑:我用\s+
替换了空格,因此它处理空格的方式会更加自由(例如,一个空格,两个空格,一个标签等都应该匹配)
答案 1 :(得分: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)
快乐的编码。