繁体   English   中英

奇怪的行为javascript regexp

[英]Strange behavior javascript regexp

console.log("url/page/value".match(/\/([a-zA-Z0-9]+)/g));

为什么这段代码返回一个数组:[/ page,/ value]? 为什么要捕获符号“ /”?

jsfiddle: http : //jsfiddle.net/wq93T/

提前致谢。

因为

  1. 正则表达式中的\\/表示:匹配文字字符/ (正斜杠必须由反斜杠转义,因为它也是/pattern delimiter/
  2. g修饰符使您返回所有匹配项

合起来,正则表达式\\/([a-zA-Z0-9]+)表示:

  1. 匹配文字字符/
  2. 匹配一个或多个字母或数字字符,将它们捕获到组1中。

所以这将匹配/somethingLikeThis

您可以在本演示中清楚地看到这一点 ,并通过添加字符串以查看匹配项或编辑正则表达式进行实验。

您使用\\转义/尝试使用此方法,即\\/表示/

 console.log("url/page/value".match(/([a-zA-Z0-9]+)/g));
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

JSFiddle

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;
}

JSFiddle

如果您不希望/ ,表达式可以进一步简化:

console.log("url/page/value".match(/[a-zA-Z0-9]+/g));

要么

console.log("url/page/value".match(/[^\/]+/g));

要么

console.log("url/page/value".split('/'));

JS FIDDLE DEMO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM