Как посчитать или заменить все подходящие слова между {} или [] в javascript регулярным выражением? - PullRequest
2 голосов
/ 30 апреля 2020

Мне нужно обработать файл с майскими предложениями в javascript. И есть некоторые специальные предложения, которые заключены в квадратные скобки [] или {}. И между этими скобками слово может встречаться несколько раз. Поэтому, чтобы найти слово вообще, я сначала попробовал:

RegExp('\\bmyword\\b', 'g');

Но как мне вставить, что слова должны быть в скобках и что между скобками и словами может быть что угодно? И если я ищу 500 слов в 10k предложениях, как я могу ускорить это? Должен ли я использовать шаблон?

1 Ответ

3 голосов
/ 30 апреля 2020

Вы можете извлечь все подстроки между {} и [] с шаблоном /\[[^[\]]*]|{[^{}]*}/g и искать нужные слова только в этих совпадениях.

Если вы ищете word в word [myword word hisword word] and word here, {word myword theirword} too. , вы ожидаете 3 как вывод:

var s = "word [myword word hisword word] and word here, {word myword theirword} too.",
    keyword = "word",
    results = 0,
    rx = /\[[^[\]]*]|{[^{}]*}/g;

// COUNTING
var matches = s.match(rx);
var rxWord = new RegExp("\\b" + keyword + "\\b", "g");
for (var x of matches) {
  results += x.match(rxWord).length;
}
console.log(results)

// REPLACING
console.log( s.replace(rx, function($0) { return $0.replace(rxWord, '$&_ID'); }) );

Шаблон \[[^[\]]*]|{[^{}]*} - см. демо - совпадения:

  • \[ - [ char
  • [^[\]]* - любые 0+ символов, кроме [ и ]
  • ] - ] char
  • | - или
  • { - { char
  • [^{}]* - любые 0+ символов, кроме { и }
  • } - a } char.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...