Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.05.2011, 22:56
Интересующийся
Отправить личное сообщение для qst13r1245r12 Посмотреть профиль Найти все сообщения от qst13r1245r12
 
Регистрация: 18.03.2010
Сообщений: 19

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

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

мне нужно, при совпадении названия строки (Главная, Не главная), увеличить счетчик в скобочках на один, т.е. регуляркой заменить единичку на двоечку и т.д. Нужно использовать функцию замены, но на своем примере я уже всю голову поломал (
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2011, 00:40
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

/\d*/
Ответить с цитированием
  #3 (permalink)  
Старый 01.06.2011, 00:42
Интересующийся
Отправить личное сообщение для qst13r1245r12 Посмотреть профиль Найти все сообщения от qst13r1245r12
 
Регистрация: 18.03.2010
Сообщений: 19

Сообщение от DreamTheater Посмотреть сообщение
/\d*/
строки могут содержать какие угодно символы (даже "(1)"), а мне нужно заменить именно то, что в скобках
Ответить с цитированием
  #4 (permalink)  
Старый 01.06.2011, 01:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Это можно сделать, но это будет решение не просто через ж, это решение через ж соседа сверху.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 01.06.2011, 01:07
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

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

Код:
/[0-9]*/
Ответить с цитированием
  #6 (permalink)  
Старый 01.06.2011, 01:12
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

DreamTheater,
Вы вопрос прочитали вообще?)
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 01.06.2011, 01:18
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 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. Причина: Подкрасил)
Ответить с цитированием
  #8 (permalink)  
Старый 01.06.2011, 01:23
Аватар для DreamTheater
Профессор
Отправить личное сообщение для DreamTheater Посмотреть профиль Найти все сообщения от DreamTheater
 
Регистрация: 15.02.2011
Сообщений: 471

...

Последний раз редактировалось DreamTheater, 01.06.2011 в 01:28.
Ответить с цитированием
  #9 (permalink)  
Старый 01.06.2011, 01:41
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 01.06.2011, 02:17
Интересующийся
Отправить личное сообщение для qst13r1245r12 Посмотреть профиль Найти все сообщения от qst13r1245r12
 
Регистрация: 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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47
Mootools функция periodical не работает по id Jumong Общие вопросы Javascript 2 11.09.2010 16:42
Функция которая работает на OnLoad не хочет работать на OnClick libinstyle Элементы интерфейса 6 23.03.2010 01:42
Рекурсивная функция HellBells Общие вопросы Javascript 3 23.11.2009 11:23
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19