给出以下两个字符串
?room=any_characters123&name=John
?room=any_characters123
我想使用正则表达式提取“any_characters123”。
我试过
(?<=room=)(\w)+(?=\&)
但是第二个字符串失败(因为匹配的字符串必须以“&amp;”结尾)。
如何编辑我的正则表达式,使其与两个字符串中的any_characters123匹配?
答案 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,}$