var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i"); //var reg = new RegExp("(^[\\?|&])" + name + "=([^&]*)(\\s|&|$)", "i"); 上面2个正则,第一个正确,第二个错误,为什么? 第一个正则中 (^|\\?|&) 为什么 ^后面必须有|,没有就不能匹配。这个正则是用来匹配url上参数的值的。
var name = 'id';var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i"); //相当于 var reg1 = /(^|\?|&)id=([^&]*)(\s|&|$)/i;var reg = new RegExp("(^[\\?|&])" + name + "=([^&]*)(\\s|&|$)", "i"); //相当于 var reg2 = /(^[\?|&])id=([^&]*)(\s|&|$)/i;//reg1的匹配字符串是以下几种(不管结尾): var match1 = "******id=xxxx" || "*******?id=xxxx" || "*******&id=xxxx";//reg2的匹配字符串是以下几种: var match2 = "?id=xxxx" || "&id=xxxx";
x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 ——《JavaScript 语言参考》中文版.chm
var name = 'id';var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i");
//相当于
var reg1 = /(^|\?|&)id=([^&]*)(\s|&|$)/i;var reg = new RegExp("(^[\\?|&])" + name + "=([^&]*)(\\s|&|$)", "i");
//相当于
var reg2 = /(^[\?|&])id=([^&]*)(\s|&|$)/i;//reg1的匹配字符串是以下几种(不管结尾):
var match1 = "******id=xxxx" || "*******?id=xxxx" || "*******&id=xxxx";//reg2的匹配字符串是以下几种:
var match2 = "?id=xxxx" || "&id=xxxx";
按照你的这种理解,match2.$2 也应该是可以去到值才对吧
用这个正则也是可以的。
为什么一定要^后面的 | ,我所了解的 | 不是或的意思吗