Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2012, 12:48
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

Regexp поиск позиции в которой находится совпавшая группа
Подскажите с какой стороны подступиться, есть регулярное выражение с гуппами, например
var re = /^(\d+)(?: р. )?(\d+)?(?: м. )?(\d+)?(?: дн. )?$/

метод match возвращает все найденые группы в исходной строке.
Вопрос, как в таком же массиве получить позиции в которых начинаются найденные группы?
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2012, 13:15
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

думаю, никак. А exec в цикле не устраивает?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 15.02.2012, 13:32
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

exec выдает индекс вхождения всего выражения, а мне нужно получить индексы вхождения всех групп в выражении.
Ответить с цитированием
  #4 (permalink)  
Старый 15.02.2012, 14:55
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Могу я поинтересоваться, зачем?) Поиск позиции осуществляется с помощью опережающей негативной или положительной проверки.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 15.02.2012, 15:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,563

На вскидку:
1. Сделать все скобки рабочими.
2. Для каждого последующего элемента массива вхождение будет суммой length предыдущих.)
3. ...
4. Profit!

Но зачем?)
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2012, 15:12
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

пришла только такая мысль, сделать все скобки незапоминающими
/^(?:\d+)(?: р. )?(?:\d+)?(?: м. )?(?:\d+)?(?: дн. )?$/
а 3 группы заключить в запоминающие скобки
var re = /^((?:\d+)(?: р. )?)((?:\d+)?(?: м. )?)((?:\d+)?(?: дн. )?)$/,
	m = '33 р. 444444 м. 555 дн. '.match(re);

if (m) {
  alert('Первый индекс: ' + m['index']);
  if (m[2]) alert('Второй индекс: ' + (m['index'] + m[1].length));
  if (m[3]) alert('Третий индекс: ' + (m['index'] + m[1].length + m[2].length));
}
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2012, 17:09
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

Всем спасибо за подсказки, приблизительное решение нашел, исходное регулярное выражение трогать нельзя и в нем могут быть как рабочие, так и не рабочие группы, задача - найти координаты рабочих групп, попрбую на лету модифицировать исходное выражение в вариант предложенны Pavel M.,

Задача - плагин для хитровывернутого ввода по маске, где дефолтовое значение вычисляется из исходной маске.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение позиции фона одного div пока мышь находится на ссылке desir Javascript под браузер 3 05.02.2012 22:54
RegExp, поиск набора слов Беляш Общие вопросы Javascript 10 30.01.2011 23:00
RegExp - поиск в найденном. Не могу понять senseysensor Общие вопросы Javascript 9 17.10.2010 21:55
RegExp - Глобальный поиск c запоминанием р-тов retator Общие вопросы Javascript 1 11.08.2010 22:53