Javascript 当输入包含换行符时,为什么正则表达式失败?

Javascript 当输入包含换行符时,为什么正则表达式失败?,javascript,regex,Javascript,Regex,我从另一个开发人员那里继承了这个javascript正则表达式,现在,即使没有任何更改,它似乎与所需的文本不匹配。以下是正则表达式: /^.*(already (active|exists|registered)).*$/i 我需要它来匹配任何看起来像 东西已经存在了更多的东西等等 对我来说,它看起来非常好,它只会同时查找这两个单词,理论上应该忽略字符串的其余部分。在我的脚本中,我像这样检查文本 var cardUsedRE = /^.*(already (active|exists|regi

我从另一个开发人员那里继承了这个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>
>错误:已为CLP注册卡号。\n

我错过什么了吗?这可能有什么问题?

tldr使用
m
修饰符使
匹配换行符。看

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

不过,我会使用一种更简单的形式:(根据“空间”的定义进行调整)

var str=“错误:已为CLP注册卡号。\n”;
str.match(/(?:已\s+(?:活动|存在|已注册))/i)

愉快的编码。

这里有一个简化但功能等效的正则表达式,可以处理换行:

/(已\s+(活动|存在|注册))/i

不知道你为什么要以
^.*.
开头或以
.*$
结尾,除非你的目标是防止换行。否则就是多余的


编辑:我将空格替换为
\s+
,因此它在处理空白方面会更加自由(例如,一个空格、两个空格、一个选项卡等都应该匹配)。

默认情况下不会匹配换行符。另外,“”可能更好地写为“\s+”,不确定是否相关,但看起来您的javascript在mdiv.innerHTML=…行上有一个输入错误,我也同意pst。我不知道你为什么会有^.*和.*$位,除非这是在整个字符串需要匹配某些内容时锚定到开头和结尾的提示。感谢提供更多信息。我没有意识到新线会引起其他问题
var str = "Error: <detail>Card number already registered for CLP.\n</detail>"
str.match(/^.*(already (active|exists|registered)).*$/i)
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)