我想针对 20 个左右的正则表达式测试给定的字符串。在 Javascript 中执行此操作的干净方法是什么?我更关心干净的代码和可读性而不是效率(但我也不希望它变得超级慢)。
现在我有:
if (href.indexOf('apple.com') > -1 ||
href.indexOf('google.com') > -1 ||
href.indexOf('yahoo.com') > -1 ||
href.indexOf('facebook.com') > -1) {
performDarkMagic()
}
但随着这个列表的增长,它会开始看起来有点混乱。
也许我可以创建一个正则表达式数组并执行类似 _.any() 的内容并在每个正则表达式上应用 regex.test ?
编辑:要匹配的字符串/正则表达式可能会变得更加复杂,我只是使用简单的 URL 来使示例可读。
使用正则表达式的测试函数。
有关正则表达式的更多信息请参见此处。https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
var re = /((google)|(facebook)|(yahoo)|(apple))\.com/;
re.test( str ); // returns true or false;
测试用例。
现场演示在这里:http://jsfiddle.net/rkzXP/1/ http://jsfiddle.net/rkzXP/1/
var func = function( str ){
var re = /((google)|(facebook)|(yahoo)|(apple))\.com/;
return re.test( str );
};
test("test for valid values", function() {
equal( func("google.com"), true);
equal( func("facebook.com"), true);
equal( func("apple.com"), true);
});
test("test for invalid values", function() {
equal( func("googl.com"), false);
equal( func("faceook.com"), false);
equal( func("apple"), false);
});
所以你可以重写你的代码如下。
var re = /((google)|(facebook)|(yahoo)|(apple))\.com/;
if( re.test(str) ){
performDarkMagic()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)