Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.05.2017, 02:32
Интересующийся
Отправить личное сообщение для IZLOM Посмотреть профиль Найти все сообщения от IZLOM
 
Регистрация: 08.10.2013
Сообщений: 24

Не работают регулярные выражения
Здравствуйте, не могу проверит строку на наличие в ней оперделенного куска, вот сама строка:
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 не хочет.
Ответить с цитированием
  #2 (permalink)  
Старый 23.05.2017, 02:59
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

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

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


или так:

/\d+\.html/
Ответить с цитированием
  #3 (permalink)  
Старый 23.05.2017, 08:08
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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);
}

Последний раз редактировалось ruslan_mart, 23.05.2017 в 09:46.
Ответить с цитированием
  #4 (permalink)  
Старый 23.05.2017, 08:53
Интересующийся
Отправить личное сообщение для IZLOM Посмотреть профиль Найти все сообщения от IZLOM
 
Регистрация: 08.10.2013
Сообщений: 24

Спасибо, первый вариант работает, второй нет, я такой уже пробовал.
вот только не пойму почему первый работает, мы выходит экранируем обратный слеш... но там же нету такого символа в строке
Ответить с цитированием
  #5 (permalink)  
Старый 23.05.2017, 09:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

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

alert('\d+');
alert('\\d+');
Ответить с цитированием
  #6 (permalink)  
Старый 23.05.2017, 09:04
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от IZLOM
первый вариант работает, второй нет
Просто ты его не так применяешь...

Посмотри как это делает Ruslan_xDD.
Ответить с цитированием
  #7 (permalink)  
Старый 23.05.2017, 09:18
Интересующийся
Отправить личное сообщение для IZLOM Посмотреть профиль Найти все сообщения от IZLOM
 
Регистрация: 08.10.2013
Сообщений: 24

Сообщение от ksa Посмотреть сообщение
Кагбэ иллюстрация

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

обрати внимание, цифровой символ это \d, если мне нужно показать что цифр много то я пишу \d+ все логично, так везде работает, но только не в JS, ему нужен еще один слеш, зачем....
Ответить с цитированием
  #8 (permalink)  
Старый 23.05.2017, 09:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Сообщение от IZLOM
ему нужен еще один слеш, зачем....
https://developer.mozilla.org/ru/doc...Objects/RegExp
Ответить с цитированием
  #9 (permalink)  
Старый 23.05.2017, 09:30
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от IZLOM
цифровой символ это \d
Если использовать как регулярное выражение - все верно.
alert(/\d+/.test(1234));

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

Иначе в строке это будет просто
alert('\d+');
Ответить с цитированием
  #10 (permalink)  
Старый 24.06.2018, 20:36
Аспирант
Отправить личное сообщение для alecto Посмотреть профиль Найти все сообщения от alecto
 
Регистрация: 12.11.2014
Сообщений: 84

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

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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
регулярные выражения remember_me Общие вопросы Javascript 2 26.12.2013 14:56
Регулярные выражения для javascript qwert_ukg Общие вопросы Javascript 3 20.04.2012 13:45
нежадные регулярные выражения KOLANICH Общие вопросы Javascript 2 12.12.2010 01:08
Регулярные выражения работают через раз San4ezy Общие вопросы Javascript 5 05.10.2010 01:50
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35