31.05.2011, 22:56
|
Интересующийся
|
|
Регистрация: 18.03.2010
Сообщений: 19
|
|
RegExp функция замены
есть поле, в нем содержатся строки такого плана:
"
- (1) Главная
- (1) Не главная
"
мне нужно, при совпадении названия строки (Главная, Не главная), увеличить счетчик в скобочках на один, т.е. регуляркой заменить единичку на двоечку и т.д. Нужно использовать функцию замены, но на своем примере я уже всю голову поломал (
|
|
01.06.2011, 00:40
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
/\d*/
|
|
01.06.2011, 00:42
|
Интересующийся
|
|
Регистрация: 18.03.2010
Сообщений: 19
|
|
Сообщение от DreamTheater
|
/\d*/
|
строки могут содержать какие угодно символы (даже "(1)"), а мне нужно заменить именно то, что в скобках
|
|
01.06.2011, 01:05
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Это можно сделать, но это будет решение не просто через ж, это решение через ж соседа сверху.
__________________
29375, 35
|
|
01.06.2011, 01:07
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
Цитата:
|
\d - находит цифру из любого алфавита (у нас же юникод). Испльзуйте [0-9], чтобы найти только обычные цифры. Например, /\d/ или /[0-9]/ найдет '2' в "B2 is the suite number."
|
Я конечно не знаток регулярных выражений, но можно еще написать так:
|
|
01.06.2011, 01:12
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
DreamTheater,
Вы вопрос прочитали вообще?)
__________________
29375, 35
|
|
01.06.2011, 01:18
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Можно сделать так:
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;
})
*/!*
);
Регуляка состоит из двух запомянающих скобок и того, что между ними нужно заменить. Соответственно, заменяем на первая скобка + счетчик + вторая скобка.
Последний раз редактировалось Sweet, 01.06.2011 в 01:21.
Причина: Подкрасил)
|
|
01.06.2011, 01:23
|
|
Профессор
|
|
Регистрация: 15.02.2011
Сообщений: 471
|
|
...
Последний раз редактировалось DreamTheater, 01.06.2011 в 01:28.
|
|
01.06.2011, 01:41
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
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>
И всё равно это удаление гланд через жопу.
__________________
29375, 35
Последний раз редактировалось Aetae, 01.06.2011 в 01:53.
Причина: Добавил вторую интерпретацию вопроса, предложенную Sweet.
|
|
01.06.2011, 02:17
|
Интересующийся
|
|
Регистрация: 18.03.2010
Сообщений: 19
|
|
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;
})
);
Последний раз редактировалось qst13r1245r12, 01.06.2011 в 02:22.
|
|
|
|