JavaScript正则表达式无法匹配给定的字符串

javascript regex is failing to match a given string

本文关键字:字符串 正则表达式 JavaScript      更新时间:2023-09-26

此 Meteor 代码无法将正则表达式与字符串匹配并在 if 条件语句中生成 true。我做错了什么?如何解决?谢谢

console.log(doc.valid);
console.log(doc.value);
var patt = new RegExp(doc.valid);
console.log(patt);
    
if (patt.test(doc.value)) {
    console.log("match");
} else {
    console.log("no match");
}
//meteor terminal
I20160313-08:06:53.143(11)? /[0-9a-zA-Z]{1,6}/g
I20160313-08:06:53.144(11)? ok
I20160313-08:06:53.144(11)? //[0-9a-zA-Z]{1,6}/g/
I20160313-08:06:53.145(11)? no match

编辑应用了注释中建议的修复程序,但正则表达式匹配了一个不应该匹配的字符串。

var patt = new RegExp(doc.valid);
console.log('applying '+ patt+ ' to '+ doc.value);
if (patt.test(doc.value, "g")) {
   console.log(doc.value + " match");
} else {
   console.log(doc.value + "no match");
  }
I20160313-08:48:26.717(11)? applying /[0-9a-zA-Z]{1,6}/ to Kingkong
I20160313-08:48:26.717(11)? Kingkong match  <..8 char.not suppose to match

如果您希望正则表达式表示"严格匹配具有 1 到 6 个字母(但不能更多)的字母数字字符串",那么它应该是:

/^[0-9a-zA-Z]{1,6}$/

原文:

/[0-9a-zA-Z]{1,6}/

表示"匹配包含 1 到 6 个字母的子字符串的字母数字字符串"。测试字符串"Kingkong"明显匹配该规则。

我认为您的问题在于您尝试实例化 RegExp 对象的方式。正则表达式对象接受字符串而不是正则表达式作为第一个参数。尝试 new RegExp("[0-9a-zA-Z]{1,6}","g")