如何使用正则表达式搜索带括号的字符串

时间:2019-05-07 05:06:29

标签: javascript arrays regex string

我有一种情况,我想搜索数组中的所有Hello (World)。您好(世界)来自变量,并且可以更改。我想使用RegExp而不是indexOfincludes方法来实现这一点。

testArray = ['Hello (World', 'Hello (World)', 'hello (worlD)']

我的比赛应返回索引1和2作为答案。

3 个答案:

答案 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+)

由于您的输入字符串结构合理,因此您可能不需要从左右绑定。您可能只关注您想要的捕获组,我假设这些捕获组是一个单词,您可以对其进行简单地修改。

使用简单的字符串替换,您可以匹配并捕获它们两者。

enter image description here

RegEx描述图

此图显示了表达式的工作方式,您可以在此link中可视化其他表达式:

enter image description here

性能测试

此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);