我有一种情况,我想搜索数组中的所有Hello (World)
。您好(世界)来自变量,并且可以更改。我想使用RegExp而不是indexOf
或includes
方法来实现这一点。
testArray = ['Hello (World', 'Hello (World)', 'hello (worlD)']
我的比赛应返回索引1和2作为答案。
答案 0 :(得分:1)
转义字符串后使用RegExp
构造函数(this answer的算法),并使用一些数组方法:
const testArray = ['Hello (World', 'Hello (World)', 'hello (worlD)'];
const string = "Hello (World)".replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
const regex = new RegExp(string, "i");
const indexes = testArray.map((e, i) => e.match(regex) == null ? null : i).filter(e => e != null);
console.log(indexes);
答案 1 :(得分:-1)
This expression可能会帮助您:
(\w+)\s\((\w+)
由于您的输入字符串结构合理,因此您可能不需要从左右绑定。您可能只关注您想要的捕获组,我假设这些捕获组是一个单词,您可以对其进行简单地修改。
使用简单的字符串替换,您可以匹配并捕获它们两者。
此图显示了表达式的工作方式,您可以在此link中可视化其他表达式:
此JavaScript代码段使用简单的100万次for
循环来显示该表达式的性能。
repeat = 1000000;
start = Date.now();
for (var i = repeat; i >= 0; i--) {
var string = "Hello (World";
var regex = /(\w+)\s\((\w+)/g;
var match = string.replace(regex, "$1 & $2");
}
end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ");
答案 2 :(得分:-1)
testArray = ['Hello (World', 'Hello (World)', 'hello (worlD)'];
let indexes = [];
testArray.map((word,i)=>{
if(word.match(/\(.*\)/)){
indexes.push(i);
}
});
console.log(indexes);