Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Поиск и замена в переменной (https://javascript.ru/forum/dom-window/70633-poisk-i-zamena-v-peremennojj.html)

dima85 21.09.2017 00:27

Поиск и замена в переменной
 
Есть переменная src:
fgdf
id 35235
hddg
id 45346
rryeh

нужно взять все строги с "id цифры" и заменить их
Я делаю вот так:
src.replace(/(id) [0-9]/gi, '<a href="$1">$2</a>');

$2 не заменяется на найденные цифры. Подскажите, что я делаю не так.

рони 21.09.2017 00:45

dima85,
src.replace(/(id)\s+(\d+)/mg, '<a href="$1">$2</a>')

dima85 21.09.2017 00:48

рони, может есть какой-то просто online сервис который позволяет делать такие конструкции? Ну не могу я сам вникнуть как такое делать.
А вас каждый раз просить тоже не хочется.

j0hnik 21.09.2017 00:54

https://regexr.com/
https://regex101.com/
сервис есть, но надо вникать, у сервиса нет искусственного интеллект, так как Рони он вас не поймет =(

рони 21.09.2017 00:57

dima85,

искать по таблице или запомнить 30 шаблонов и 3 флага
https://javascript.ru/regexp

dima85 21.09.2017 15:06

text text
text
id 34355
text text
id 35235
text
text
id 45346


А replace может удалять вверх? То есть у меня есть переменная с line = "35235" это id 35235 в переменной src код выше.
В src нужно id 35235 удалить и удалить все что до вышестоящей строчки с id *, строчек может быть разное количество. Или такие вещи лучше через функции?

ksa 21.09.2017 16:08

Цитата:

Сообщение от dima85
А replace может удалять вверх?

Работает только с найденой подстрокой. За ее пределами действия не производятся. :no:

Цитата:

Сообщение от dima85
Или такие вещи лучше через функции?

У метода replace есть калбек-функция...

Может тебе лучше пример привести на предмет "так было", "потом стало"... :)
Т.к. у тебя нет в строке
Цитата:

Сообщение от dima85
line = "35235"


dima85 21.09.2017 17:12

В переменной line нет слова id

Примеры, целая src
text text
text
id 34355
text text
id 35235
text
text
id 45346


Если line = "35235" то удаляем 4-5 строчки, получаем это:
text text
text
id 34355
text
text
id 45346



если line = "45346" то удаляем 6,7,8 строки, получаем:
text text
text
id 34355
text text
id 35235

рони 21.09.2017 17:34

dima85,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>


</head>

<body>
<textarea id="h" name=""  rows="12" >text text
text
id 34355
text text
id 35235
text
text
id 45346

</textarea>
 <script>

var line = "35235", reg = new RegExp("((id)\\s+(\\d+))[^\\d]+?"+line, "mig");

h.value = h.value.replace(reg, "$1")
  </script>
<textarea id="k" name=""  rows="12" >text text
text
id 34355
text text
id 35235
text
text
id 45346

</textarea>
 <script>

var line = "45346", reg = new RegExp("((id)\\s+(\\d+))[^\\d]+?"+line, "mig");

k.value = k.value.replace(reg, "$1")
  </script>




</body>
</html>

Rasy 21.09.2017 17:44

Цитата:

Сообщение от dima85
Если line = "35235" то удаляем 4-5 строчки, получаем это:

Простой вариант. Пока набиваю руку в регулярках

var str = `text text
text
id 34355
text text
id 35235
text
text
id 45346`;
str = str.replace(/(id\s{1}\d+)(\D+id\s{1}35235\s)([a-zA-Z0-9\n\s]+)/im, '$1\n$3');
alert(str);


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