如何在Javascript中将字符串与模式数组匹配?

fat*_*Cop 5 javascript regex arrays

我有两个变量:

var input = "user1@gmail.com";
var prefferedPatterns = ["*@gmail.com", "*@yahoo.com", "*@live.com"];
Run Code Online (Sandbox Code Playgroud)

想要将输入与首选模式数组匹配。如果有任何模式匹配,则我必须执行某些任务(在此示例中,输入是确定的匹配)。如何匹配JavaScript中的一系列模式?

Ama*_*dan 6

您可以将您的模式(如果它们是有效的正则表达式)编译为一个以提高性能:

var masterPattern = new RegExp(patterns.join('|'));
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

var input = 'user1@gmail.com';
var preferredPatterns = [
  ".*@gmail.com$",
  ".*@yahoo.com$",
  ".*@live.com$"
];

var masterPattern = new RegExp(preferredPatterns.join('|'));

console.log(masterPattern.test(input));
// true
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 4

您需要RegExp在将变量作为正则表达式传递时使用构造函数。

var input = 'user1@gmail.com';
var preferredPatterns = [".*@gmail\\.com$", ".*@yahoo\\.com$", ".*@live\\.com$"];
for (i=0; i < preferredPatterns.length;i++) {
  if(input.match(RegExp(preferredPatterns[i]))) {
     console.log(preferredPatterns[i])
    }
    }
Run Code Online (Sandbox Code Playgroud)

点是正则表达式中的特殊元字符,可以匹配任何字符。您需要转义正则表达式中的点以匹配文字点。

正如@zerkms 所说,您也可以使用下面的模式列表。

var preferredPatterns = ["@gmail\\.com$", "@yahoo\\.com$", "@live\\.com$"];
Run Code Online (Sandbox Code Playgroud)