use*_*413 7 javascript regex arrays optimization
假设我有两个数组:一个是正则表达式,另一个是输入.那么,在性能和可读性方面,做出类似输出的最佳方法是什么?
var regex = [
'/rat/',
'/cat/'
'/dog/',
'/[1-9]/'
]
var texts = [
'the dog is hiding',
'cat',
'human',
'1'
]
Run Code Online (Sandbox Code Playgroud)
最终的结果是
result = [
'human'
]
Run Code Online (Sandbox Code Playgroud)
好吧,我在想的是做一些像reduce:
// loop by text
for (var i = texts.length - 1; i >= 0; i--) {
// loop by regex
texts[i] = regex.reduce(function (previousValue, currentValue) {
var filterbyRegex = new RegExp("\\b" + currentValue + "\\b", "g");
if (previousValue.toLowerCase().match(filterbyRegex)) {
delete texts[i];
};
return previousValue;
}, texts[i]);
}
Run Code Online (Sandbox Code Playgroud)
但是,这不可读吗?也许还有另一种我没有想到的方式.
Rod*_*ist 10
我可能会这样做
var regexs = [
/rat/i,
/cat/i,
/dog/i,
/[1-9]/i
]
var texts = [
'the dog is hiding',
'cat',
'human',
'1'
]
var goodStuff = texts.filter(function (text) {
return !regexs.some(function (regex) {
return regex.test(text);
});
});
Run Code Online (Sandbox Code Playgroud)
但实际上,除非你做了10,000次,否则这里的性能差异可以忽略不计.
请注意,这使用ES5方法,这些方法很容易调整(我知道这个单词)