Соответствующая группа в строковом параметре регулярного выражения 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"));

Другие вопросы по тегам