奇怪的行为javascript正则表达式
为什么此代码返回数组:[/page,/value]?为什么捕获符号“/” jsfiddle: 提前谢谢。因为奇怪的行为javascript正则表达式,javascript,regex,Javascript,Regex,为什么此代码返回数组:[/page,/value]?为什么捕获符号“/” jsfiddle: 提前谢谢。因为 正则表达式中的\/表示:匹配文本字符/(正斜杠必须用反斜杠转义,因为它也是/模式分隔符/) g修饰符使您返回所有匹配项 总之,正则表达式\/([a-zA-Z0-9]+)表示: 匹配文字字符/ 匹配一个或多个字母或数字字符,将它们捕获到组1 因此,这将匹配类似于此的/something 您可以在中清楚地看到这一点,并通过添加字符串来查看匹配项,或者通过编辑正则表达式来进行实验。您正在使用\
\/
表示:匹配文本字符/
(正斜杠必须用反斜杠转义,因为它也是/模式分隔符/
)g
修饰符使您返回所有匹配项\/([a-zA-Z0-9]+)
表示:
/
/something
您可以在中清楚地看到这一点,并通过添加字符串来查看匹配项,或者通过编辑正则表达式来进行实验。您正在使用\
来转义\
,即尝试这一方法/
console.log("url/page/value".match(/\/([a-zA-Z0-9]+)/g));
如果您不希望/
,表达式可以进一步简化为:
console.log("url/page/value".match(/([a-zA-Z0-9]+)/g));
或
或
exec
返回的数组包含索引0中的整个匹配项,并在后续索引中捕获(括号中的值)(第一个在1,第二个在2,等等)
作为一行:
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
作为返回捕获数组的函数:
console.log(/\/([a-zA-Z0-9]+)/g.exec("url/page/value")[1]); // "page"
谢谢!但是,如何在“/”之后但没有此符号的情况下获取文本?
console.log("url/page/value".split('/'));
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
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;
}