Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Помогите с регуляркой как PCRE (https://javascript.ru/forum/css-html/78294-pomogite-s-regulyarkojj-kak-pcre.html)

varjaginm 22.08.2019 15:01

Помогите с регуляркой как PCRE
 
В приложениях использую библ PCRE, и привык, что при выражении
[0-9]{3}|[0-9]{5}
будут следующие результаты:
123 // true
1234 // false
12345 // true
123456 //false
т.е. ЛИБО 3, ЛИБО 5 цифр и никак иначе !

Проверяю это на JS - Фиг!
var str = "1234";
var patt = new RegExp("[0-9]{3}|[0-9]{5}");
var res = patt.test(str);
document.getElementById("demo").innerHTML = res;

дает true, т.е. "Я нашел одно указанное выражение"

Можно ли заставить JS проверять как PCRE ?

ksa 22.08.2019 15:07

Цитата:

Сообщение от varjaginm
Можно ли заставить JS проверять как PCRE ?

Как вариант...

var re=/^(\d{3}|\d{5})$/;
alert(re.test(12));
alert(re.test(123));
alert(re.test(1234));
alert(re.test(12345));
alert(re.test(123456));

varjaginm 22.08.2019 15:24

Работает!
Но ситуация другая: регулярки приходят извне, являются по-сути параметрами, а вот такие вырианты не идут:

var patt = "(\d{3}|\d{5})"; // получаем как-то
var re=/^patt$/;
alert(re.test("12"));
alert(re.test("123"));
alert(re.test("1234"));
alert(re.test("12345"));
alert(re.test("123456"));

везде false ! Или я не так подключаю patt ?
А с regExp ( как мне бы хотелось)
var str = "123";
var patt = new RegExp("^(\d{3}|\d{5})&");
var res = patt.test(str);
false !

ksa 22.08.2019 15:30

Цитата:

Сообщение от varjaginm
var patt = new RegExp("^(\d{3}|\d{5})&");

Нужно экранировать "\"
var re=new RegExp('^(\\d{3}|\\d{5})$');
alert(re.test(12));
alert(re.test(123));
alert(re.test(1234));
alert(re.test(12345));
alert(re.test(123456));

varjaginm 22.08.2019 15:38

Спасибо ! Про экранирование упустил да и амперсанд вместо доллара (((
Помогло !


Часовой пояс GMT +3, время: 01:32.