Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   RegExp функция замены (https://javascript.ru/forum/misc/17743-regexp-funkciya-zameny.html)

qst13r1245r12 31.05.2011 22:56

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

"
- (1) Главная
- (1) Не главная
"

мне нужно, при совпадении названия строки (Главная, Не главная), увеличить счетчик в скобочках на один, т.е. регуляркой заменить единичку на двоечку и т.д. Нужно использовать функцию замены, но на своем примере я уже всю голову поломал (

DreamTheater 01.06.2011 00:40

/\d*/

qst13r1245r12 01.06.2011 00:42

Цитата:

Сообщение от DreamTheater (Сообщение 106869)
/\d*/

строки могут содержать какие угодно символы (даже "(1)"), а мне нужно заменить именно то, что в скобках

Aetae 01.06.2011 01:05

Это можно сделать, но это будет решение не просто через ж, это решение через ж соседа сверху.

DreamTheater 01.06.2011 01:07

Цитата:

\d - находит цифру из любого алфавита (у нас же юникод). Испльзуйте [0-9], чтобы найти только обычные цифры. Например, /\d/ или /[0-9]/ найдет '2' в "B2 is the suite number."
Я конечно не знаток регулярных выражений, но можно еще написать так:

Код:

/[0-9]*/

Aetae 01.06.2011 01:12

DreamTheater,
Вы вопрос прочитали вообще?)

Sweet 01.06.2011 01:18

Можно сделать так:
var string = Array(4).join("- (1) Главная\n"),
    count = 0;
alert("Исходный вариант:\n" + string);
alert("После replace:\n" +
*!*
  string.replace(/(- \().*(\) Главная)/g, function(str, part1, part2){
    return part1 + ++count + part2;
  })
*/!*
);
Регуляка состоит из двух запомянающих скобок и того, что между ними нужно заменить. Соответственно, заменяем на первая скобка + счетчик + вторая скобка.

DreamTheater 01.06.2011 01:23

...

Aetae 01.06.2011 01:41

Sweet,
1?<textarea rows="7" cols="40" onclick="value = value.replace( /\d+(?=\) Не главная)/g , function(a){return ++a}) ">
click

- (1) Главная
- (1) Не главная
- (1) Главная
- (1) Не главная
- (1) Главная
</textarea>
2?<textarea rows="7" cols="40" onclick="i=0; value = value.replace( /\d+(?=\) Главная)/g ,function(){return ++i}) ">
click

- (1) Главная
- (1) Не главная
- (1) Главная
- (1) Не главная
- (1) Главная
</textarea>

И всё равно это удаление гланд через жопу.

qst13r1245r12 01.06.2011 02:17

Sweet, Aetae пасиба!
вроде, и не совсем через жопу... максимум, через ноздри =). "Главная","Не главная" в моем случае - переменные, а дефис перед строкой статичен, так что, пойдет...
Запилил первый пример под то, что мне нужно... чтобы не от переменной увеличивалось, а от числа в скобках
var string = Array(4).join("- (1) Главная\n"),
    count = 0;
alert("Исходный вариант:\n" + string);
alert("После replace:\n" +
string.replace(/(- \()(.*)(\) Главная)/g, function(str, part1, part2,part3){
part4=parseInt(part2)+1;	
    return part1 +  part4 +part3;
  })
);


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