带有数组的javascript正则表达式模式

时间:2014-04-21 13:49:25

标签: javascript regex

我想创建一个应该能够搜索数组的正则表达式模式。

让我们说:

var arr = [ "first", "second", "third" ];

var match = text.match(/<arr>/);

应该只能匹配

<first> or <second> or <third> ......

但应忽略

<ffirst> or <dummy>

我需要一种有效的方法。

任何帮助都会很棒。 感谢

2 个答案:

答案 0 :(得分:4)

  1. 首先,您可以array.map引用所有特殊的正则表达式字符。
  2. 然后,您可以使用| array.join加入数组元素并创建RegExp的实例。
  3. 代码:

    function quoteSpecial(str) { return str.replace(/([\[\]^$|()\\+*?{}=!.])/g, '\\$1'); }
    
    var arr = [ "first", "second", "third", "fo|ur" ];
    var re = new RegExp('<(?:' + arr.map(quoteSpecial).join('|') + ')>');
    //=> /<(?:first|second|third|fo\|ur)>/
    

    然后使用此RegExp对象:

    '<first>'.match(re); // ["<first>"]
    
    '<ffirst>'.match(re); // null
    
    '<dummy>'.match(re); // null
    
    '<second>'.match(re); // ["<second>"]
    
    '<fo|ur>'.match(re); // ["<fo|ur>"]
    

答案 1 :(得分:3)

您应使用(a|b|c)从列表中搜索特定字词。

列表来自arr,将| char作为粘合剂加入值

var arr = [ "first", "second", "third" ];

var match = text.match(new RegExp("<(?:"+arr.join("|")+")>")); //matches <first> <second> and <third>

请注意,如果你的&#34;来源&#34;单词可能包含正则表达式的保留字符 - 您可能会遇到麻烦 - 因此您可能需要在加入数组之前转义这些字符

可以找到这样做的好功能here

function regexpQuote(str, delimiter) {
  return String(str)
    .replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
}

所以在这种情况下你会有

function escapeArray(arr){
    var escaped = [];
    for(var i in arr){
       escaped.push(regexpQuote(arr[i]));
    }
    return escaped;
}

var arr = [ "first", "second", "third" ];
var pattern = new RegExp("<(?:"+escapeArray(arr).join("|")+")>");
var match = text.match(pattern); //matches <first> <second> and <third>