2012-10-27 45 views
0

我有一个表达式与url查询字符串中的问号相匹配,我发现自己需要扩展表达式以适应我尝试读取的URL包含与问题相同的unicode的情况标记%3DReg Ex匹配?或Unicode%3d

表达是

var regexS = "[\\?&]" + name + "=([^&#]*)"; 

从什么非常少,我知道正则表达式的我想这可能工作

var regexS = "[\\?&]|[\\%3d&]" + name + "=([^&#]*)"; 

感谢您的帮助

+0

如果URL包含'%3d',(一般),它不应该被解释为查询分隔符。这就是它逃脱的原因。 –

+0

你试过了吗? –

+0

请注意,'%3d'的意思是'='。 '&'是'%3f' –

回答

1

假设用于字符串转义的Javascript。

"[\\?&]|[\\%3d&]" + name + "=([^&#]*)"注意到

  • 级联(abc)上交替(a|b|c)具有优先级和
  • [\\%3d&]意味着 “百分比或3或d或符号”(字符类)。
  • ?的转义形式是%3F,而不是%3D。 %3D表示=。请参阅wikipedia: percent encoding
  • 第一个字符类中的&符号与&q2=中的www.example.com?q1=v1&q2=v2匹配。也许你想允许逃脱的&符号。其转义形式为%26

您可能意思是"([\\?&]|\\%3f|\\%26)" + name + "=([^&#]*)"

还要注意的是?有一个字符类中没有特殊含义,也不需要进行转义:"([?&]|%3f|%26)" + name + "=([^&#]*)"

+0

感谢您的回应。了解regEx的人永远不会惊叹我。我使用http://www.nvcc.edu/home/drodgers/ceu/resources/test_regexp.asp来测试表达式并使用([?&] | \\%3d&)来测试www.mydomain.com?q= 123测试正确,但www.mydomain.com%3dq = 123测试错误。 –

+0

@MarkHollas谢谢你的例子。答案已更新。 –

+0

好好关注%3f我正在查看查询字符串的错误部分。感谢您的帮助! –