匹配模式不起作用

时间:2012-06-06 11:07:13

标签: javascript regex

我正在尝试匹配只有a,g,c或t的字符串(不敏感) 所以字符串:“AAaaatCCCc”有效而“catb”不有效。 这是我的功能:

var pattern = "/^[agct]+$/i";
if (!this.inputSeq.value.trim().match(pattern)){
    this.errMsg = "Invalid input sequence -must contain only a,g,c or t"
    updateErrorBox(this.errMsg);
}

当我输入有效字符串时,我仍然收到错误消息

2 个答案:

答案 0 :(得分:4)

从正则表达式文字中删除引号:

var pattern = "/^[agct]+$/i";

要:

var pattern = /^[agct]+$/i;

存在隐式转换

  

<强>的regexp

     

正则表达式对象。如果传递了非RegExp对象obj,则使用新的RegExp(obj)将其隐式转换为RegExp。

MDN

但它不起作用,因为你在模式和斜杠中有标记:/../

var pattern = "^[agct]+$";
... .match(pattern)

由于隐式转换可以正常工作,但由于缺少i标记而区分大小写。

答案 1 :(得分:1)

假设您的输入文本正确被选中,其值的控制台日志可能有助于隔离问题,此代码应该有效:

if (!this.inputSeq.value.match(/^\s*[agct]+\s*$/i)) {
    this.errMsg = "Invalid input sequence -must contain only a,g,c or t"
    updateErrorBox(this.errMsg);
}

您正在使用文字sting而不是正则表达式来处理模式,因此出现错误消息。