与URL参数匹配的正则表达式

Regular expression matching URL parameters

本文关键字:正则表达式 URL 参数      更新时间:2023-12-16

给定以下两个字符串

?room=any_characters123&name=John
?room=any_characters123

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

我试过

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

但是这个在第二个字符串上失败(因为匹配的字符串必须以"&"结尾)。

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

由于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

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

room=([^&]+)

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

room=('w+)'&*?

它将测试& 的零或正出现

这应该可以做到:

/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"]

运行字符串通过两个regex测试,一个是您已经拥有的,然后是这个:

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