2015-02-17 4 views
0

Учитывая следующие две строкирегулярные выражения, параметры URL

?room=any_characters123&name=John 

?room=any_characters123 

Я хочу, чтобы извлечь «any_characters123» с использованием регулярных выражений.

Я попытался

(?<=room=)(\w)+(?=\&) 

но терпит неудачу на второй строке (поскольку соответствует строка должна заканчиваться «&»).

Как отредактировать свое регулярное выражение так, чтобы оно соответствовало any_characters123 в обеих строках?

ответ

2

Так как JavaScript выиграл» t support lookbehinds, вам нужно использовать группу захвата.

\?room=(\w+) 

Пример:

> var s = "?room=any_characters123&name=John" 
> var s1 = "?room=any_characters123" 
undefined 
> var re = /\?room=(\w+)/; 
undefined 
> console.log(re.exec(s)[1]) 
any_characters123 
undefined 
> console.log(re.exec(s1)[1]) 
any_characters123 
1

Если вы используете JS, lookbehind не поддерживается. Вы можете изменить регулярное выражение следующим образом:

room=([^&]+) 
+1

Удивительно, но этот самый старый правильный ответ остался без превышения +1 – anubhava

1

Попробуйте положить * в конце вашего выражения:

room=(\w+)\&*? 

Это будет тест на ноль или плюс вхождений &

0

Это должно сделать трюк:

/room=(\w+)&?/ 
/* 
    find "room=" then match any word characters (at least one) until you 
    possibly hit "&" 
*/ 

Пример:

/room=(\w+)&?/.test("?room=any_characters123") 
// => true 
"?room=any_characters123".match(/room=(\w+)&?/) 
// => ["room=any_characters123", "any_characters123"] 
0

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

(?<=room=)(\w){1,}$ 
Смежные вопросы