正则表达式匹配URL参数

时间:2015-02-17 03:29:28

标签: javascript regex

给出以下两个字符串

?room=any_characters123&name=John

?room=any_characters123

我想使用正则表达式提取“any_characters123”。

我试过

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

但是第二个字符串失败(因为匹配的字符串必须以“&amp;”结尾)。

如何编辑我的正则表达式,使其与两个字符串中的any_characters123匹配?

5 个答案:

答案 0 :(得分:2)

由于javascript不支持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 :(得分:1)

如果您使用JS,则不支持lookbehind。您可以按如下方式修改正则表达式:

room=([^&]+)

答案 2 :(得分:1)

尝试将*放在表达式的末尾:

room=(\w+)\&*?

它将测试&

的零或加上次数

答案 3 :(得分: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"]

答案 4 :(得分:0)

通过两个正则表达式测试运行字符串,你已经拥有的那个,然后是这个:

(?<=room=)(\w){1,}$