Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Несколько замен в строке (https://javascript.ru/forum/misc/74244-neskolko-zamen-v-stroke.html)

fedushok 24.06.2018 17:42

Несколько замен в строке
 
Приветствую всех!

Как выполнить несколько замен в строке? Мой пример,
строка - "func1(a,b) func2(c,a,b)"
замене подлежит подстрока - "a,b" (где a и b - вещественные числа)
строка-заменитель - "x,y".

рони 24.06.2018 17:53

fedushok,
alert("func1(a,b) func2(c,a,b)".replace(/a,b/g, "x,y"));

fedushok 24.06.2018 17:59

Дело в том, что a и b - это вещественные числа, и чему они равны не известно.

Aetae 24.06.2018 18:03

Если всегда последние, то:
.replace(/-?\d+,-?\d+\)/g, "x,y")

рони 24.06.2018 18:05

fedushok,
условия задачи не конкретные, ... !!!
alert("func1(100,900) func2(c,5,1)".replace(/\d+,\d+/g, "x,y"));

fedushok 24.06.2018 18:22

Благодарю. Как иногда полезно прибегать к помощи на форуме!
1. Сильно ли повлияет на производительность если я добавлю "просмотр вперёд" -.replace(/-?\d+,-?\d+(?=\))/g, "x,y");? Приведённый пример замещает последнюю скобку, чего быть не должно. Или сделать замену со скобкой позади - .replace(/-?\d+,-?\d+\)/g, "x,y)");?
2. Вам удалось выделить в моём примере частный случай решения задачи (за что еще раз благодарю), но душа просит что-то общее. Что если задней скобки не будет? Выражение "a,b" железно идет после "func1(".

рони 24.06.2018 18:28

fedushok,
если a и b известны, сделайте из них new RegExp

fedushok 24.06.2018 18:32

Цитата:

Сообщение от рони (Сообщение 488218)
fedushok,
условия задачи не конкретные, ... !!!
alert("func1(100,900) func2(c,5,1)".replace(/\d+,\d+/g, "x,y"));

Дело в том, что a и b во всем выражении одинаковые. Как учесть, что замене подлежит все пары чисел, которые в точности совпадают с двумя вещественными числами, которые через запятую идут сразу после "func1("?

fedushok 24.06.2018 18:35

Цитата:

Сообщение от рони (Сообщение 488225)
fedushok,
если a и b известны, сделайте из них new RegExp

Цитата:

Сообщение от fedushok (Сообщение 488215)
Дело в том, что a и b - это вещественные числа, и чему они равны не известно.

Известно, что они идут сразу после "func1(", а затем далее еще один раз

рони 24.06.2018 18:41

fedushok,
сколько func всего?

fedushok 24.06.2018 18:44

2. Но func1 только один раз.

рони 24.06.2018 19:01

fedushok,
alert("func1(100,900) func2(c,100,900)".replace(/func1\((\d+,\d+)([\S\s]+)\1/g, "func1(x,y$2x,y"));

fedushok 24.06.2018 21:27

Можно комментарий как это работает

рони 24.06.2018 21:35

fedushok,
нашли первые скобки (\d+,\d+)
смотрим есть ли далее повторение этих скобок\1
меняем
ключ g не нужен

fedushok 24.06.2018 22:36

а что значит "$2" в строке второго аргумента?

рони 24.06.2018 22:44

fedushok,
всё что между одинаковыми частями, вторые скобки ([\S\s]+)
) func2(c,

j0hnik 25.06.2018 00:08

https://learn.javascript.ru/regular-...ons-javascript вот тут все отлично расписано по регексам.


Часовой пояс GMT +3, время: 05:20.