簡體   English   中英

帶有數組的javascript正則表達式模式

[英]javascript regex pattern with an array

我想創建一個應該能夠搜索數組的正則表達式模式。

讓我們說:

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

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

應該只能匹配

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

但應該忽略

<ffirst> or <dummy>

我需要一種有效的方法。

任何幫助都會很棒。 謝謝

  1. 首先,您可以使用array.map來引用所有特殊的正則表達式字符。
  2. 然后你可以做array.join使用|加入數組元素| 並創建一個RegExp實例。

代碼:

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>"]

您應該使用(a|b|c)從列表中搜索特定單詞。

該列表是通過將值與|連接而從arr制成的| 作為膠水的炭

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

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

請注意,如果您的“源”字可能包含正則表達式的保留字符 - 您可能會遇到麻煩 - 因此您可能需要在加入數組之前轉義這些字符

可以在這里找到一個很好的功能:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM