为什么当输入包含换行符时regex会失败
Why is regex failing when input contains a newline?
我从另一个开发人员那里继承了这个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>
我是不是错过了什么?这可能有什么问题?
这里有一个简化但功能等效的正则表达式,应该处理换行符:
/(already's+(active|exists|registered))/i
不知道你为什么要以^.*
开头或以.*$
结尾,除非你的目标是专门防止换行。否则就是多余的。
编辑:我用's+
替换了空格,这样它处理空白的方式会更自由(例如,一个空格、两个空格、一个制表符等应该都匹配)。
tldr使用m
修饰符使.
与换行符匹配。请参阅MDC正则表达式文档。
失败(注意字符串文字中的"''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)
快乐的编码。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- Regex代码只允许一个空格
- Regex匹配除“”之外的所有字符;.js”;
- RegExp:匹配Javascript中除regex值之外的所有内容
- Javascript RegEx validator
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- regex有效,但在区分大小写的情况下失败
- 如果我超过一定数量的模式,则使用parcely.js的Regex过滤器将失败
- Javascript regex在在线验证器上工作,但在代码中失败
- Regex-正则表达式模式在URL GET参数上失败
- 如果存在超过3个字母或2个特殊字符,Regex将失败
- PHP Regex失败,'&'字符串;在javascript中(正确地)传递
- Javascript Regex应该通过.test(),但似乎失败了——为什么
- 为什么当输入包含换行符时regex会失败
- jqunit,测试regex在某个时候失败了,为什么
- Javascript regex相当于php失败
- replace()函数regex失败,显示“无效字符”
- Regex验证电话号码失败