String.replaceAll с использованием регулярного выражения в обоих параметрах в JS

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Мне нужно заменить все экземпляры подстроки модифицированной версией подстроки, могу ли я сделать что-то вроде:

     const regex = /[0-9]{4}[A-Z]{3}/g; // format: 0000ABC
    myString = myString.replaceAll(regex, regex   " I'm modified");
 

Абстрактный пример

Если myString является

5000ABC, 250XYZ, GEN3000

и я хочу изменить определенные шаблоны из 4 цифр и 3 букв, мой ожидаемый результат

5000ABC я изменен, 250XYZ, 1000DEF я изменен, GEN3000

Комментарии:

1. Почему бы и нет myString.replaceAll(regex, "$amp; I'm modified")

2. Какой именно результат вы ожидаете?

3. @epascarello обновил вопрос для абстрактного примера

Ответ №1:

Не уверен, что я понимаю, какой формат вывода вы хотите, но, судя по вашему примеру, похоже, что вы хотите добавить некоторую строку после каждого совпадения. Поехали:

 const input = 'Some text with 1234ABC and 5678XYZ';
const regex = /([0-9]{4}[A-Z]{3})/g; // format: 0000ABC
var result = input.replace(regex, "$1 I'm modified");
console.log('input:  '   input);
console.log('result: '   result);
     

Вывод:

 input:  Some text with 1234ABC and 5678XYZ
result: Some text with 1234ABC I'm modified and 5678XYZ I'm modified
 

Объяснение:

  • запишите свой шаблон в круглые скобки для последующего использования
  • используйте строку, в которой вы можете ссылаться на захваченный шаблон, и добавляйте / добавляйте любой текст, который вы хотите .replace() $1

Ответ №2:

На данный момент у меня есть обходной путь

 const regex = /[0-9]{4}[A-Z]{3}/g;
var matches = myString.match(regex);
if (matches amp;amp; matches.length > 0) {
   for (var match of matches) {
      var modified = match   "I'm modified";
      myString = myString.replaceAll(match, modified)
   }
}