我想知道如何将字符串与正则表达式数组匹配。 我知道如何在数组中循环。 我也知道如何通过用|分隔长的正则表达式来做到这一点 我希望有一种更有效的方式
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。
如何在需要时动态创建正则表达式(假设数组随时间变化)
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');
}
如果你想要匹配一个名为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
这可以吗 ?
/**
* 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.
*/