2015-08-13 2 views
1

У меня возникли проблемы со всем URL-адресом, который имеет тот же формат: planning|test/test, и если да, то для хранения в LocalStorage. Вот мой код:Регулярное совпадение в jQuery

if(window.location.href.split('#')[1].match('/planning\|[a-z]*\/[a-z]*/')) 
{ 
    localStorage.setItem('hash_tag', window.location.href.split('#')[1]); 
} 

Проблема здесь регулярное выражение match не совсем сделать работу здесь. Любая помощь в этом? Очень признателен.

+0

Вместо 'window.location.href.split ('#') [1]' вы могли бы просто использовать 'location.hash' – SeinopSys

+0

Можете ли вы привести несколько примеров * должны совпадать * - * не должны совпадать * , – ndn

ответ

1

Не используйте «"»символы (апостроф) для регулярных выражений шаблона в матче. Попробуйте выполнить следующие 2 образца в консоли браузера (я проверил в FF 39):

// prints 'MATCH' 
var to_match = 'planning|test/test'; 
if (to_match.match(/planning\|[a-z]*\/[a-z]*/)) { 
    console.log('MATCH'); 
} else { 
    console.log('WAT'); 
} 

// prints 'WAT' 
var to_match = 'planning|test/test'; 
if (to_match.match('/planning\|[a-z]*\/[a-z]*/')) { 
    console.log('MATCH'); 
} else { 
    console.log('WAT'); 
} 

Кроме того, вы можете использовать https://regex101.com/#javascript, чтобы проверить ваши регулярные выражения.

Удачи вам!

1

Основная проблема с вашим регулярным выражением заключается в том, что вы объявили его '...'. Вам нужно удалить ' вокруг строкового литерала регулярного выражения.

В случае строки могут иметь какplanningИЛИ[a-z]*/[a-z]*, вы можете использовать

if(window.location.href.split('#')[1].match(/planning|[a-z]*\/[a-z]*/)) { 
     localStorage.setItem('hash_tag', window.location.href.split('#')[1]); 
} 

или

if(/planning|[a-z]*\/[a-z]*/.test(window.location.href.split('#')[1])) { 
     localStorage.setItem('hash_tag', window.location.href.split('#')[1]); 
} 

Обратите внимание, что \| буквального | символа и не обозначает чередование ,

Если вы хотите, чтобы соответствовать | как буквальные, просто используйте

if(/planning\|[a-z]*\/[a-z]*/.test(window.location.href.split('#')[1])) { 
     localStorage.setItem('hash_tag', window.location.href.split('#')[1]); 
} 
+0

На самом деле вы можете заменить 'window.location.href.split ('#') [1]' на 'location.hash.substring (1)', так как 'location.hash' возвращает якорьную часть URL-адреса, включая знак хеширования (#). –

+0

Теперь он работает, но он соответствует всем, что начинается с 'planning |', и я не хочу сопоставлять url как 'planning | 654656'! – user3350731

+0

Итак, '|' является буквальным? Затем сохраните escape-код '\ |' как в исходном регулярном выражении. Тогда основная проблема связана с апострофами вокруг регулярного выражения. –

Смежные вопросы