Регулярное выражение для поиска слова по определенным символам - PullRequest
2 голосов
/ 27 июня 2019

У меня есть строка:

const str = 'DELETE FROM "organization" WHERE "name" = $1 AND "metadata" = $2 AND "id" = $3';

Мне нужно найти "metadata" слово, чтобы изменить его. Я знаю только, что есть = $2 после "metadata" слова.

const regex = RegExp(/ = $2/); // just to show what I have
const foundWord = someMagicWithRegex(str, regex); // "metadata"
const newString = str.replace(foundWord, `${foundWord}::text`);
console.log(newString);

'DELETE FROM "organization" WHERE "name" = $1 AND "metadata"::text = $2 AND "id" = $3'

Как regex должен выглядеть? (если это возможно)

1 Ответ

3 голосов
/ 27 июня 2019

Вы можете использовать

var str = 'DELETE FROM "organization" WHERE "name" = $1 AND "metadata" = $2 AND "id" = $3';
console.log(str.replace(/"[^"]*"(\s*=\s*\$2\b)/g, '"NEW METADATA"$1'));

Регулярное выражение "[^"]*"(\s*=\s*\$2\b):

  • "[^"]*" - ", 0 или более символов, отличных от ", а затем "
  • (\s*=\s*\$2\b) - Группа захвата 1 ($1 в шаблоне замены относится к значению, захваченному в эту группу):
    • \s*=\s* - =, заключенный в 0+ пробелов
    • \$ - символ $ (должен быть экранирован)
    • 2\b - 2 как целое слово.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...