Как искать строки в скобках с помощью регулярных выражений - PullRequest
0 голосов
/ 07 мая 2019

У меня есть случай, когда я хочу найти все Hello (World) в массиве.Hello (World) исходит из переменной и может измениться.Я хочу добиться этого, используя RegExp, а не indexOf или includes методы.

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

Мое совпадение должно возвращать индексы 1 и 2 в качестве ответов.

Ответы [ 3 ]

1 голос
/ 07 мая 2019

Используйте конструктор RegExp после экранирования строки (алгоритм из этот ответ ) и используйте некоторые методы массива:

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);
0 голосов
/ 07 мая 2019

testArray = ['Hello (World', 'Hello (World)', 'hello (worlD)'];
let indexes = [];
testArray.map((word,i)=>{
  if(word.match(/\(.*\)/)){
    indexes.push(i);
  }
});
console.log(indexes);
0 голосов
/ 07 мая 2019

Это выражение может помочь вам сделать это:

(\w+)\s\((\w+)

Возможно, вам не нужно ограничивать его слева и справа, поскольку ваши входные строки хорошо структурированы.Вы можете просто сосредоточиться на желаемых группах захвата, которые, как я предположил, каждая из них представляет собой одно слово, которое вы можете просто изменить.

С простой заменой строки вы можете сопоставить и захватить их обоих.

enter image description here

Описательный график RegEx

Этот график показывает, как будет работать выражение, и вы можете визуализировать другие выражения в этой ссылке :

enter image description here

Тест производительности

Этот фрагмент JavaScript показывает производительность этого выражения, используя простой миллион раз 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. ? ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...