Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的行为javascript正则表达式_Javascript_Regex - Fatal编程技术网

奇怪的行为javascript正则表达式

奇怪的行为javascript正则表达式,javascript,regex,Javascript,Regex,为什么此代码返回数组:[/page,/value]?为什么捕获符号“/” jsfiddle: 提前谢谢。因为 正则表达式中的\/表示:匹配文本字符/(正斜杠必须用反斜杠转义,因为它也是/模式分隔符/) g修饰符使您返回所有匹配项 总之,正则表达式\/([a-zA-Z0-9]+)表示: 匹配文字字符/ 匹配一个或多个字母或数字字符,将它们捕获到组1 因此,这将匹配类似于此的/something 您可以在中清楚地看到这一点,并通过添加字符串来查看匹配项,或者通过编辑正则表达式来进行实验。您正在使用\

为什么此代码返回数组:[/page,/value]?为什么捕获符号“/”

jsfiddle:

提前谢谢。

因为

  • 正则表达式中的
    \/
    表示:匹配文本字符
    /
    (正斜杠必须用反斜杠转义,因为它也是
    /模式分隔符/
  • g
    修饰符使您返回所有匹配项
  • 总之,正则表达式
    \/([a-zA-Z0-9]+)
    表示:

  • 匹配文字字符
    /
  • 匹配一个或多个字母或数字字符,将它们捕获到组1
  • 因此,这将匹配类似于此的
    /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;
    }