Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / RegExp & lastIndex / 6 сообщений из 6, страница 1 из 1
23.10.2007, 19:33
    #34889216
last_elf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp & lastIndex
Можно ли как-то повторно использовать шаблон регулярки в яваскрипте не натыкаясь на подобную хрень, когда один раз поиск проходит нормально, а второй раз нет.

var regSelPart = new RegExp("(.*)CODE123(.*)CODE123(.*)", "ig");
alert(regSelPart.test('some CODE123 text CODE123 below'));
alert(regSelPart.test('some CODE123 text CODE123 below'));

Первый алерт здесь даст true, а второй - false!

Решение проблемы-то я нашел - писать каждый раз после любых действий с шаблоном:
regSelPart.lastIndex=0;

Но есть ли более элегантный и надежный способ? А то часто забываешь, что обязательно lastIndex надо поставить в ноль, да и код от этого страдает.
...
Рейтинг: 0 / 0
23.10.2007, 21:59
    #34889423
agrasoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp & lastIndex
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<html>
<head>
<script>
RegExp.prototype.__test = RegExp.prototype.test;
RegExp.prototype.test = function(/*String*/ value, /*Boolean*/ setIndexToZero) {
	var r = this.__test(value);
	if (setIndexToZero == undefined || setIndexToZero === true) {
		this.lastIndex =  0 ;
	}
	return r;
};

var regSelPart = new RegExp('(.*)CODE123(.*)CODE123(.*)', 'gi');
alert(regSelPart.test('some CODE123 text CODE123 below'));
alert(regSelPart.test('some CODE123 text CODE123 below'));
</script>
</head>
</html>

Код: plaintext
Veo moto
...
Рейтинг: 0 / 0
25.10.2007, 11:33
    #34893658
last_elf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp & lastIndex
Круто, мы переопределили метод test. А что если необходимо выполнять некие действия с шаблоном с помощью других методов RegExp'a? - например exec(). Или методов объекта string? - the_str.replace(regSelPart, replaced_text);

Но это так мысли вслух.. Просто интересно как же по-человечески это стоит программировать.
...
Рейтинг: 0 / 0
25.10.2007, 12:24
    #34893887
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp & lastIndex
Для теста можно просто убрать g
...
Рейтинг: 0 / 0
25.10.2007, 13:22
    #34894171
last_elf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp & lastIndex
Проверил - да, можно. Непонятно только почему так.
...
Рейтинг: 0 / 0
25.10.2007, 13:35
    #34894234
belugin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RegExp & lastIndex
http://lists.evolt.org/archive/Week-of-Mon-20050829/175309.html] [thelist] Javascript regex lastindex property with global flag on [TIP]
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / RegExp & lastIndex / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]