kuu*_*uus 11 javascript regex arrays string
在正则表达式中转换字符串数组然后在不同字符串上多次使用正则表达式以获得结果匹配然后迭代它们的最简洁有效的方法是什么?现在我使用以下内容:
var myArray = ['peaches', 'bananas', 'papaya', 'supercity'];
var myString = 'I want some papaya and some peaches';
var regexFromMyArray = new RegExp(myArray.toString().replace(/,/g, '|'), 'gi');
var matches = myString.match(regexFromMyArray) || [];
if (matches.length) {
for (var i = 0, l = matches.length; i < l; i++) {
console.log('Found: ' + matches[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
性能在这里很重要,所以请简单的javascript.
Ami*_*oki 21
只需加入管道,使用 Array.join
var regexFromMyArray = new RegExp(myArray.join("|"), 'gi');
Run Code Online (Sandbox Code Playgroud)
只是这样做,因为if条件只是多余的.
for(var i = 0; i < matches.length; i++)
console.log("Found:", matches[i]);
Run Code Online (Sandbox Code Playgroud)
toString内部调用join(",")),replace也不使用函数.既然你谈到正则表达式,我想说
String.indexOf,这是一种非正则表达形式的解决方法.这是当前接受的答案的改进版本,以函数形式呈现,该函数接受字符串数组和可选标志列表(作为字符串)。它解释包含特殊字符的字符串并对它们进行转义。它还以这样的方式对字符串进行排序,以便按照最大咀嚼原则的预期发挥作用。
const regexFrom = (strings, flags) =>
new RegExp(
strings
// Escape special characters
.map(s => s.replace(/[()[\]{}*+?^$|#.,\/\\\s-]/g, "\\$&"))
// Sort for maximal munch
.sort((a, b) => b.length - a.length)
.join("|"),
flags
);
// Example
const strings = [".+", "apple", "[a-z]*", "app", "apps", "orange", "banana[]"];
const pattern = regexFrom(strings, "gi");
const string = "I really like Apple phones, they have great apps! Check out this regex: /.+/";
let result; while (result = pattern.exec(string)) {
console.log(result[0]);
}Run Code Online (Sandbox Code Playgroud)