[英]javascript regex pattern with an array
我想創建一個應該能夠搜索數組的正則表達式模式。
讓我們說:
var arr = [ "first", "second", "third" ];
var match = text.match(/<arr>/);
應該只能匹配
<first> or <second> or <third> ......
但應該忽略
<ffirst> or <dummy>
我需要一種有效的方法。
任何幫助都會很棒。 謝謝
|
加入數組元素|
並創建一個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.