【问题标题】:How to "place-hold" regex matches in array using javascript如何使用javascript在数组中“放置”正则表达式匹配
【发布时间】:2014-03-30 00:31:06
【问题描述】:

如果我有多个匹配正则表达式,例如:

var matches = string.match(/\s*(match1)?\s*(match2)?(match3)?\s*/i);

如果我正在测试的字符串是这样的:

var string = "match1 match3";

有没有办法输出这个数组值:

matches[1] = "match1";
matches[2] = "";
matches[3] = "match3";

注意:我希望正则表达式匹配整个事物,但在数组中“占位”它找不到的匹配项。

希望这是有道理的。感谢您的帮助!

【问题讨论】:

  • 已经有一个“占位符”。例如"match2".match(/\s*(match1)?\s*(match2)?(match3)?\s*/i); 返回 ["match2", undefined, "match2", undefined] [0] 是完整的正则表达式匹配,[1] [2] [3] 是各个组

标签: javascript arrays regex contentplaceholder


【解决方案1】:

已经有一个“占位符”。不匹配的组弹出与组号匹配的数组索引和未定义的值。例如

var someString = "match2";
var matches = someString.match(/\s*(match1)?\s*(match2)?(match3)?\s*/i);

matches 现在有

["match2", undefined, "match2", undefined]

元素 0 是完整的正则表达式匹配,元素 1-3 是各个组

所以你可以做例如......

// check if group1
if (typeof matches[1] != 'undefined')

【讨论】:

    【解决方案2】:

    当您想将字符串与正则表达式进行比较时,只需执行 Array join.Something 之类的,

    matches[1] = "match1"; 
    matches[2] = "";
    matches[3] = "match3";
    var mystring = mathches.join("");
    

    加入字符可以是任何东西。你也可以这样做,

    var mystring = mathches.join(" ");
    

    编辑: 从问题描述中不确定,但我认为您希望正则表达式输出一个数组。类似

     text = "First line\nSecond line";
     var regex = /(\S+) line\n?/y;
    

    愿意,

    var match = regex.exec(text);
    print(match[1]);  // prints "First"
    print(regex.lastIndex); // prints 11
    

    更多信息here

    【讨论】:

    • 这不是我所要求的......我希望正则表达式输出一个看起来像这样的数组,而不是将匹配项与原始数组进行比较。
    • 正则表达式比较的输出只能是“true”/“false”
    • .match match 和.exec一样这样做
    • 我只是希望能够检测条件正则表达式匹配的某个部分是否找不到任何匹配项。
    猜你喜欢
    • 2014-07-12
    • 1970-01-01
    • 2011-11-29
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多