RegExp для соответствия между двумя символами

1

Я ищу решение, чтобы найти регулярное выражение, которое даст мне все, что находится между двумя символами k и -.

Пример: получите 12 из 42k12-b

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

k(.*)\-

Но он включает этих двух персонажей.

Как я могу это достичь?

Теги:

1 ответ

1
function createRegExp(str, startChar, endChar) {
    let regExpText = startChar + '(.*)' + endChar;
    let expression = new RegExp(regExpText, 'g');
    return expression.exec(str)[1];
}

Эта функция будет принимать 3 аргумента. Строка, символ, с которого начинается поиск, и символ, где заканчивается поиск, оба символа не включены в возвращаемый результат.

Группа захвата выражения в этом текущем формате (.*) Будет жадной, поэтому, учитывая строки "abcdabcdabcd" и символы "a" и "d", она вернет полужирную часть строки "a bcdabcdabc d", но используя ленивый квантификатор (.*?) и учитывая те же символы, он вернет эту полужирную часть строки "a bc dabcdabcd".

Функция .exec возвращает массив с 2 элементами, первый из которых является полным совпадением выражения, который включает в себя оба предоставленных символа и символы между ними, тогда как второй элемент массива является только символами между двумя предоставленными символами.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню