正则表达式匹配字符似乎不存在

时间:2014-01-10 17:51:45

标签: regex

我正在尝试使用正则表达式获取一些javascript cookie定义,但是在一个场合发生了一些奇怪的事情。我使用的正则表达式是~document.cookie\s*=\s*([^\n|^\r|^}]+)~ 当它在以下字符串上运行时

<!--
document.cookie = "stvisitor=noref|1|; path=/;"
// -->

匹配仅为"stvisitor=noref,而不是整行直到新行字符。

3 个答案:

答案 0 :(得分:1)

你的正则表达式错了。试试这个:

/document.cookie\s*=\s*(.*)$/

您正在使用:([^\n|^\r|^}]+)

被解释为:

[^\n|^\r|^}]+ match a single character not present in the list below
Quantifier: Between one and unlimited times, as many times as possible, giving back as needed [greedy]
\n matches a fine-feed (newline) character (ASCII 10)
|^ a single character in the list |^ literally
\r matches a carriage return (ASCII 13)
|^} a single character in the list |^} literally

答案 1 :(得分:1)

请改用:

~document.cookie\s*=\s*([^\n\r}]+)~

请记住,字符类中的所有字符都被视为文字,除了:^在类的开头,转义序列(如\n)和-在两个字符之间

换句话说,字符类中的|不是逻辑OR而只是|字符。

答案 2 :(得分:0)

您不需要在第三个括号内使用竖线(|)。

~document.cookie\s*=\s*([^\n\r}]+)~