Соответствующая группа в строковом параметре регулярного выражения node.js не работает
String.prototype.replace()
Метод документации говорит:
Указание строки в качестве параметра
Строка замены может включать следующие специальные шаблоны замены:
$$
: Вставляет "$".$&
: Вставляет соответствующую подстроку.$`
: Вставляет часть строки, которая предшествует соответствующей подстроке.$'
: Вставляет часть строки, которая следует за совпадающей подстрокой.$n
: Кудаn
является положительным целым числом меньше 100, вставляет n- ю строку в скобках, заключенную в скобки, при условии, что первый аргумент былRegExp
объект. Обратите внимание, что это 1-индексированный.
Раздел совместимости браузера также указывает, что Node.js поддерживает String.replace
команда.
Тем не менее, я попробовал следующее в Node.js:
> 'lalalalalalalffffff'.replace(/(la)(la)*(f.*)/, "$1")
'lalalalalalalffffff'
> 'lalalalalalalffffff'.replace(/(la)(la)*(f.*)/, "$2")
'lalalalalalalffffff'
> 'lalalalalalalffffff'.replace(/(la)(la)*(f.*)/, "$3")
'lalalalalalalffffff'
Я ожидаю, что ответы будут la
, la
, а также ffffff
соответственно. Что здесь не работает?
2 ответа
Как показывает ваш пример, ваш пример ввода lalalalalalalffffff
, но обратите внимание на l
до первого f
, Проблема в том, что ваше регулярное выражение ничего не соответствует, потому что он не может найти один или несколько la
с последующим f
из-за этого глупо l
,
Вы можете убедиться сами на Regex101.com
Если вы хотите сохранить дополнительный l
, и имеют $2
дать вывод la
, ты можешь попробовать:
(la)(la[l]?)*(f.*)
И, если вы хотите $2
соответствовать lalalalalal
, ты можешь использовать:
(la)((?:la[l]?)*)(f.*)
Который также будет соответствовать lalala
за lalalalafffffff
Это не работает, потому что ваше регулярное выражение не соответствует вашей строке (что, вероятно, неправильно).
Вы скучаете по a
после последнего l
или вы должны бросить последний l
lalalalalalalffffff
=> lalalalalalalaffffff
console.log('lalalalalalalaffffff'.replace(/(la)(la)*(f.*)/, "$1"));
console.log('lalalalalalalaffffff'.replace(/(la)(la)*(f.*)/, "$2"));
console.log('lalalalalalalaffffff'.replace(/(la)(la)*(f.*)/, "$3"));