RegEx заменяет числа больше, чем переменные в Javascript - PullRequest
2 голосов
/ 19 апреля 2019

У меня есть строка: «выбор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]

Я чувствую, что я часть пути туда.

Учитывая, что я имею дело с однозначными и двузначными числами и собираюсь включить переменную, что regEx может помочь мне изменить эту строку?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Вы можете использовать .replace с обратным вызовом:

let str = "selection5 selection1 selection2 selection3 selection4";
let x = 2;
let regex = /\s*\b\w+?(\d+)\b/g;
let m;

let repl = str.replace(regex, function($0, $1) {
  return ($1 > x ? "" : $0);
}).trim();

console.log( repl );

Regex /\b\w+?(\d+)\b/g сопоставляет все слова, заканчивающиеся цифрами 1+, и захватывает цифры в группе захвата # 1, которую мы используем внутри функции обратного вызова для сравнения с переменной x.

0 голосов
/ 19 апреля 2019

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

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