Поясните поведение регэкспа в JS, плиз
218 сообщений
#9 лет назад
Докопался до своей "ошибки", почему регэксп не срабатывает, но всё равно не могу понять, почему так((матчим номера вм-кошельков: должно быть R и за ним 12 цифр
var wm = 'R123456789012';
я пробежал глазами референс по js regex и вроде как от php/perl оно мало чем отличается. По моим понятиям, должно было бы быть так:
var res = wm.match(/^R\d{12}$/i); - но так вообще ничего не матчит
эксперименты привели к тому, что:
var res = wm.match(/\d{12}/); - заматчит "1" (хотя по моему пониманию должно заматчить "123456789012" )
var res = wm.match(/\d{12}/g); - заматчит "1,2,3,4,5,6,7,8,9,0,1,2" (хотя по моему пониманию опять таки должно заматчить "123456789012" )
хотя написано, что "g - Perform a global match (find all matches rather than stopping after the first match)"
поясните, плиз, кто-то, где я ошибаюсь.
3315 сообщений
#9 лет назад
TigerDesign, Используя объект:
var rexp = new RegExp("^R{12}", "g");
var res = str.match(rexp);
Используя литерал:
var res = str.match(/^R{12}/g);
218 сообщений
#9 лет назад
vovka-morkovka, спасибо за ответ.Вы тестировали и у вас работает?
У меня - ничем не отличается от \d{12} - четко ваш регэксп результат "R1", если добавить $ в конце (а это нужно ведь) - то null
При том, что в онлайн-валидаторах js-регэкспа всё работает так, как и должно бы работать по моей логике...
я сейчас вот подумал - быть может, какие-то js-плагины добавляют какое-то странное поведение?..
3315 сообщений
#9 лет назад
TigerDesign, var wm = "R111111111111"
Используя объект:
var rexp = new RegExp("^R{12}", "g");
var res = wm.match(rexp);
Используя литерал:
var res = wm.match(/^R{12}/g);
Цитата (TigerDesign):
Вы тестировали и у вас работает?

3315 сообщений
#9 лет назад
Цитата (TigerDesign):если добавить $ в конце (а это нужно ведь) - то nullНичего подобного:

218 сообщений
#9 лет назад
Var wm = "R111111111111";var rexp = new RegExp("^R{12}" );
var res = wm.match(rexp);
alert(res);
результат - "R1"
var wm = "R111111111111";
var rexp = new RegExp("^R{12}$" );
var res = wm.match(rexp);
alert(res);
результат - null
Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0
всё больше склоняюсь к тому, что кто-то где-то меняет как-то поведение рекэкспов, но как-то это странно, да и непонятно даже, в какую сторону меняет и как, чтобы копать куда-то...
218 сообщений
#9 лет назад
В фаербаге у меня тоже всё ок, а на сайте - беда...ладно, буду копаться... спасибо...
а ларчик просто открывался...
{12} съедает темплейтер из tpl-ки...