#javascript #regex
#javascript #регулярное выражение
Вопрос:
У меня есть строка: «выбор 1 выбор 2 выбор 3 выбор 4»
Я ищу, чтобы удалить все слова, которые заканчиваются на число, большее переменной. Например:
let str = "selection1 selection2 selection3 selection4";
let x = 2;
let regExp = RegExp(...);
let filtered = str.replace(regExp , ""); // should equal "selection1 selection2"
Я придумал следующее выражение, которое выбирает все слова, которые заканчиваются числами больше 29:
/(selection[3-9][0-9]|[1-9]d{3}d*)/gi
Результатом этого регулярного выражения в строке «selection1 selection 40» является [selection40]
Я чувствую, что я часть пути туда.
Учитывая, что я имею дело с однозначными и двузначными числами и хочу включить переменную, какое регулярное выражение может помочь мне изменить эту строку?
Ответ №1:
Вы можете использовать .replace
с обратным вызовом:
let str = "selection5 selection1 selection2 selection3 selection4";
let x = 2;
let regex = /s*bw ?(d )b/g;
let m;
let repl = str.replace(regex, function($0, $1) {
return ($1 > x ? "" : $0);
}).trim();
console.log( repl );
Регулярное /bw ?(d )b/g
выражение сопоставляет все слова, заканчивающиеся цифрами 1 , и записывает цифры в группу захвата # 1, которую мы используем внутри функции обратного вызова для сравнения с переменной x
.
Комментарии:
1. Отличный ответ! Одним из улучшений является замена нескольких пробелов только одним пробелом и удаление дополнительных пробелов в конце. Что-то вроде:
repl.replace(/s /g, ' ').trim()
.2. Работает для меня! Он работает очень хорошо. Кроме того, @Khalid, спасибо за доработку!
3. @afriedman111 С удовольствием. Пожалуйста, обратите внимание, что вам понадобится
replace()
в следующем случаеlet str = "selection1 selection20 selection2 selection3";
4. Пожалуйста, обратите внимание, что я позаботился об удалении пробела в приведенном выше коде.
Ответ №2:
Вы можете разделить на пробелы, затем захватить группу, используя регулярное выражение, которое получает только числовую часть и фильтрует ее соответствующим образом.
const str = "selection1 selection2 selection3 selection4";
const threshold = 2;
const pattern = /selection(d )/
const result = str
.split(' ')
.filter(x => Number(x.match(pattern)[1]) <= threshold)
.join(' ');
console.log(result);