JavaScript与数组匹配

问题描述 投票:10回答:4

我想知道如何将字符串与正则表达式数组匹配。 我知道如何在数组中循环。 我也知道如何通过用|分隔长的正则表达式来做到这一点 我希望有一种更有效的方式

if (string contains one of the values in array) {

例如:

string = "the word tree is in this sentence";  
array[0] = "dog";  
array[1] = "cat";  
array[2] = "bird";  
array[3] = "birds can fly";  

在上面的示例中,条件将为false。 但是,string = "She told me birds can fly and I agreed"将返回true。

javascript arrays match
4个回答
20
投票

如何在需要时动态创建正则表达式(假设数组随时间变化)

if( (new RegExp( '\\b' + array.join('\\b|\\b') + '\\b') ).test(string) ) {
  alert('match');
}

但是z zxswい


对于支持javascript版本1.6的浏览器,您可以使用http://jsfiddle.net/gaby/eM6jU/方法

some()

if ( array.some(function(item){return (new RegExp('\\b'+item+'\\b')).test(string);}) ) { alert('match'); }


5
投票

(许多年后)

我的@Gaby的答案版本,因为我需要一种方法来检查数组中正则表达式的CORS原点:

http://jsfiddle.net/gaby/eM6jU/1/

0
投票

如果你想要匹配一个名为var corsWhitelist = [/^(?:.+\.)?domain\.com/, /^(?:.+\.)?otherdomain\.com/]; var corsCheck = function(origin, callback) { if (corsWhitelist.some(function(item) { return (new RegExp(item).test(origin)); })) { callback(null, true); } else { callback(null, false); } } corsCheck('otherdomain.com', function(err, result) { console.log('CORS match for otherdomain.com: ' + result); }); corsCheck('forbiddendomain.com', function(err, result) { console.log('CORS match for forbiddendomain.com: ' + result); }); 的数组中的文字字符串,你可以通过这样做将它们组合成一个交替

strings

如果您没有文字字符串,则需要组合正则表达式,然后使用new RegExp(strings.map( function (x) { // Escape special characters like '|' and '$'. return x.replace(/[^a-zA-Z]/g, "\\$&"); }).join("|"))

http://code.google.com/p/google-code-prettify/source/browse/trunk/js-modules/combinePrefixPatterns.js

0
投票

这可以吗 ?

/**
 * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
 * matches the union of the sets of strings matched by the input RegExp.
 * Since it matches globally, if the input strings have a start-of-input
 * anchor (/^.../), it is ignored for the purposes of unioning.
 * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
 * @return {RegExp} a global regex.
 */
© www.soinside.com 2019 - 2024. All rights reserved.