Я пытаюсь зафиксировать счетчики, связанные с ключевыми словами в строке txt. Все ключевые слова загружаются в массив заранее.
Этот код находится в jquery / javascript. Я не могу жестко закодировать строковые ключевые слова, поэтому они хранятся в массиве. Пожалуйста, помогите мне найти то, что идет вместо "Reg Expression" до и / или после ключевой переменной в цикле.
HTML br можно использовать для завершения этого регулярного выражения в этой итерации цикла.
Попытка закончить с keywordCount = "2, 5, 11"
//String I need to search through
var txt = "Edit Req'd2<br>Errors5<br>Pndg App11<br>";
//array of keywords I can use to find associated counts to keywords
var keyword = ["Edit Req'd", "Errors", "Pndg App"];
//empty string declared before loop
var keywordCount = '';
for (i = 0; i < keyword.length; i++) {
// takes the comma off end of first entry in array
// might not be needed or another method might be better?
keyword[i] = $.trim(keyword[i]);
//regex expression generated using keyword and unknown expression
var regexmatch = RegExp("Reg Expression" + keyword + "Reg Expression")
//use regex expression to generate string containing counts
keywordCount += (txt.match(regexmatch)) + ",";
}
Попробуйте: var regexmatch = RegExp (keyword [i] + "(\ d +)"), затем возьмите группу 1.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я бы использовал диапазон цифр / чисел для соответствия номеру ([0-9]; это довольно простой материал для регулярных выражений) и использовал бы группу для соответствия любому из ключевых слов:
[0-9]+(something|somethingelse|other)Вы также можете использовать группы захвата, чтобы match() возвращал их отдельно:
var keyword = ["Edit Req'd", "Errors", "Pndg App"];
var regexmatch = RegExp('(\b' + keyword.join('|') + ')([0-9]+)', 'g')
(обратите внимание, что мы используем границу слова \b, чтобы убедиться, что ключевое слово не является частью более длинного слова, и флаг 'g' для global, чтобы сигнализировать, что нам нужно несколько результатов)
Теперь match() будет соответствовать только одному результату, и нам нужны совпадения для каждого ключевого слова, поэтому вместо этого мы будем использовать exec():
var txt = "Edit Req'd2<br>Errors5<br>Pndg App11<br>";
var keyword = ["Edit Req'd", "Errors", "Pndg App"];
var regex = RegExp('(\b' + keyword.join('|') + ')([0-9]+)', 'g')
var match = regex.exec( txt ); // ...find the first match
var numbers = [];
while ( match !== null ) {
numbers.push( match[ 2 ]); // #0 of exec() its return-value is the result as a whole: "Edit Req'd2"
// #1 is the value of the first capture-group: "Edit Req'd"
// #2 is the value of the second capture-group: "2"
match = regex.exec( txt ); // ...find the next match
}
console.info("the numbers are:", numbers);Наконец, обратите внимание, что регулярные выражения могут выглядеть круто, это не всегда самый быстрый (с точки зрения производительности). Если производительность имеет большое значение, вы можете использовать (например) indexOf().
Из вашего вопроса кажется, что вы могли бы немного освежить свои знания о регулярных выражениях. Вокруг куча статей (просто ищите «основы регулярных выражений» или «regex 101») - вроде этого: https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285 *
Регулярное выражение JavaScript не поддерживает просмотр назад.
Спасибо, тестировал онлайн-тестером регулярных выражений и в консоли devtools, но, видимо, поленился; не все браузеры их поддерживают. Изменил ответ на что-то без оглядки.
Вот пример, который может помочь вам в достижении желаемого результата.
//String I need to search through
var txt = "Edit Req'd2<br>Errors5<br>Pndg App11<br>";
//array of keywords I can use to find associated counts to keywords
var keyword = ["Edit Req'd", "Errors", "Pndg App"];
//empty string declared before loop
var keywordCount = '';
var i = 0;
var keywordCount = "";
var splittedValue = "";
while (i < keyword.length) {
if (txt.indexOf(keyword[i]/i)) {
splittedValue = txt.split(keyword[i]);
if (keywordCount === "") {
keywordCount = splittedValue[1].split("<br>")[0];
} else {
keywordCount += ", " + splittedValue[1].split("<br>")[0];
}
}
i += 1;
}
console.info(keywordCount);
Возможный дубликат Как найти число в строке с помощью JavaScript?