javascript - 正则表达式 javascript 返回意外结果

标签 javascript regex

在下面的代码中,我想用第一个 validationPattern 验证 messageText 并显示来自 validationPatterns 数组的相应消息。 Pattern 和 Message 由管道“|”分隔性格。

为此,我使用下面的代码,但总是得到错误的结果。有人可以看看这个并帮助我吗?

var messageText = "Message1234";
var validationPatterns = [
    ['\/^.{6,7}$/|message one'],
    ['\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b|message two']
];
for (var i = 0; i < validationPatterns.length; i++) {
    var validationvalues = validationPatterns[i].toString();

    var expr = validationvalues.split("|")[0];
    console.log(expr.constructor);

    if(expr.test(messageText)) {
       console.log("yes");
    } else {
       console.log("no");
    }
}

我知道我们不能使用管道作为分隔符,因为管道也是正则表达式的一部分。不过我稍后会更改它。

最佳答案

您的验证模式是字符串。这意味着:

  • 反斜杠被吃掉了,因为它们只是对后面的字符进行字符串转义。 "\b" 等同于 "b"。您需要对它们进行双重转义:"\\b"
  • 您不能对它们调用test 方法。你需要构造 RegExp objects

虽然可以解决此问题,但如果您只使用正则表达式文字并将它们作为对象(或数组)的不同属性从消息中分离出来会更好。

var inputText = "Message1234";
var validationPatterns = [
    [/^.{6,7}$/, 'message one'],
    [/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/, 'message two']
];
for (var i = 0; i < validationPatterns.length; i++) {
    var expr = validationPatterns[i][0],
        message = validationPatterns[i][1];
    console.log(expr.constructor); // RegExp now, not String

    if(expr.test(inputText)) {
       console.log(message+": yes");
    } else {
       console.log(message+": no");
    }
}

关于javascript - 正则表达式 javascript 返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16797469/

相关文章:

javascript - Fine Uploader uuid 唯一?

javascript - 访问调用者函数上下文而不传递它

regex - 在Dart中获取以符号开头的单词

ruby - 使用 Ruby 从 URL 中提取数据

python - 查找带有 beautifulsoup 的特定链接

java - 是否有等同于 Java 正则表达式中的交集 (&&) 运算符的 JavaScript 正则表达式?

javascript - JS Map from Object.entries 内存使用情况

javascript - 在 JavaScript 中查找文本字符串

javascript - 无法获取 9GAG 提要

c++ - NetBIOS 名称正则表达式