console.log("url/page/value".match(/\/([a-zA-Z0-9]+)/g));
为什么这段代码会返回一个数组:[/ page,/ value]?为什么捕获符号'/'?
jsfiddle:http://jsfiddle.net/wq93T/
提前致谢。
答案 0 :(得分:1)
因为
\/
表示:匹配文字字符/
(正斜杠必须通过反斜杠进行转义,因为它也是/pattern delimiter/
)g
修饰符可让您返回所有匹配一起使用正则表达式\/([a-zA-Z0-9]+)
表示:
/
所以这将匹配/somethingLikeThis
您可以在this demo中清楚地看到,并通过添加字符串来查看匹配项或通过编辑正则表达式进行实验。
答案 1 :(得分:1)
您正在使用/
转发\
尝试此操作,即\/
表示/
console.log("url/page/value".match(/([a-zA-Z0-9]+)/g));
答案 2 :(得分:1)
var path = "url/page/value";
var regex = /\/([a-zA-Z0-9]+)/g;
var match = regex.exec(path);
console.log(match[0]); // "/page"
console.log(match[1]); // "page"
match = regex.exec(path);
console.log(match[0]); // "/value"
console.log(match[1]); // "value"
match = regex.exec(path);
console.log(match); //null
exec
返回的数组包含索引0中的整个匹配,并在后续索引处捕获(括号中的值)(首先是1,秒是2等)。
作为一条线:
console.log(/\/([a-zA-Z0-9]+)/g.exec("url/page/value")[1]); // "page"
作为返回捕获数组的函数:
var path = "url/page/value";
var regex = /\/([a-zA-Z0-9]+)/g;
console.log(capturedMatch(path, regex, 1));
function capturedMatch(str, rgx, index) {
var m;
var res = [];
while((m = rgx.exec(str)) != null) {
res.push(m[index]);
}
return res;
}
答案 3 :(得分:0)
如果您不希望/
,则表达式可以进一步简化为:
console.log("url/page/value".match(/[a-zA-Z0-9]+/g));
或者
console.log("url/page/value".match(/[^\/]+/g));
或者
console.log("url/page/value".split('/'));