Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работают регулярные выражения (https://javascript.ru/forum/misc/68996-ne-rabotayut-regulyarnye-vyrazheniya.html)

IZLOM 23.05.2017 02:32

Не работают регулярные выражения
 
Здравствуйте, не могу проверит строку на наличие в ней оперделенного куска, вот сама строка:
https://ru.aliexpress.com/item/High-quality-Hand-Spinner-Fidget-toy-metal-Plastic-EDC-Tri-Finger-Spinner-For-Autism-and-ADHD/32801344258.html?spm=2114.03010208.3.12.zImVf7f


Нужно по куску
/32801344258.html


Определить что она подходит.
Примеры которые я пробовал:
new RegExp("/\d+\.html/").test(str)

new RegExp("\d+\.html").test(str)

new RegExp("/^.*\d+\.html.*$/").test(str)


Все они не работают, хотя очень странно, софт по типу RegexBuddy 3 прекрасно находит, также серверные языки PHP и Python тоже воспринимают некоторые примеры, но JS не хочет.

Diphenyl Oxalate 23.05.2017 02:59

Нужно делать или так:

new RegExp("\\d+\\.html")


или так:

/\d+\.html/

ruslan_mart 23.05.2017 08:08

var url = 'https://ru.aliexpress.com/item/High-quality-Hand-Spinner-Fidget-toy-metal-Plastic-EDC-Tri-Finger-Spinner-For-Autism-and-ADHD/32801344258.html?spm=2114.03010208.3.12.zImVf7f';

if(/\/\d+\.html(?=\W|$)/.test(url)) {
   alert(true);
}

IZLOM 23.05.2017 08:53

Спасибо, первый вариант работает, второй нет, я такой уже пробовал.
вот только не пойму почему первый работает, мы выходит экранируем обратный слеш... но там же нету такого символа в строке

ksa 23.05.2017 09:02

Цитата:

Сообщение от IZLOM
мы выходит экранируем обратный слеш... но там же нету такого символа в строке

Кагбэ иллюстрация

alert('\d+');
alert('\\d+');

ksa 23.05.2017 09:04

Цитата:

Сообщение от IZLOM
первый вариант работает, второй нет

Просто ты его не так применяешь...

Посмотри как это делает Ruslan_xDD.

IZLOM 23.05.2017 09:18

Цитата:

Сообщение от ksa (Сообщение 453165)
Кагбэ иллюстрация

alert('\d+');
alert('\\d+');

Все равно не понятно, есть общий синтаксис регулярных выражений, который прекрасно работает в серверных языках, во всем софте в котором есть работа с регулярными выражениями, но получается что в JS этот синтаксис отличается.
Вот даже на википедии написано

обрати внимание, цифровой символ это \d, если мне нужно показать что цифр много то я пишу \d+ все логично, так везде работает, но только не в JS, ему нужен еще один слеш, зачем....:-?

laimas 23.05.2017 09:22

Цитата:

Сообщение от IZLOM
так везде работает, но только не в JS

С чего вдруг?

Цитата:

Сообщение от IZLOM
ему нужен еще один слеш, зачем....

https://developer.mozilla.org/ru/doc...Objects/RegExp

ksa 23.05.2017 09:30

Цитата:

Сообщение от IZLOM
цифровой символ это \d

Если использовать как регулярное выражение - все верно. :yes:
alert(/\d+/.test(1234));

Если как строку - то придется "экранировать экран". ;)
alert(new RegExp('\\d+').test(1234));

Иначе в строке это будет просто
alert('\d+');

alecto 24.06.2018 20:36

друзья, подскажите пожалуйста.
данный пример с карманами $1 и $2 работает
alert('a@b aa@bb'.replace(/([a-z]+)@([a-z]+)/g, '$2@$1'));

нулевой $0 карман должен соответствовать найденному выражению
alert('aaa bbb'.replace(/[a-z]+/g, '!$0!'));

но этот код не работает.
подскажите пожалуйста, где ошибка?


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