我正在尝试使用正则表达式获取一些javascript cookie定义,但是在一个场合发生了一些奇怪的事情。我使用的正则表达式是~document.cookie\s*=\s*([^\n|^\r|^}]+)~
当它在以下字符串上运行时
<!--
document.cookie = "stvisitor=noref|1|; path=/;"
// -->
匹配仅为"stvisitor=noref
,而不是整行直到新行字符。
答案 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}]+)~