【问题标题】:Javascript regex pattern array with loop带有循环的 Javascript 正则表达式模式数组
【发布时间】:2011-07-24 04:35:17
【问题描述】:

我试图创建一个函数来替换数组中的多个正则表达式值。如果数组不包含任何类型的引号,则此方法有效,当我想在我的模式中使用逗号时,这是有问题的。所以我一直在尝试寻找另一种方式来服务这种模式,但没有运气。有什么想法吗?

function removeCharacters(str){
    //ucpa = unwanted character pattern array
    //var ucpa = [/{/g,/}/g,/--/g,/---/g,/-/g,/^.\s/];
    var ucpa = ["/{/","/}/","/--/","/---/","/-/","/^.\s/","/^,\s/"];
    for (var i = 0; i < ucpa.length; i++){ 
        //does not work
        var pattern = new RegExp(ucpa[i],"g");
        var str = str.replace(pattern, " ");
    }
    return str;
}

工作:

function removeCharacters(str){
    //ucpa = unwanted character pattern array
    var ucpa = [/{/g,/}/g,/--/g,/---/g,/-/g,/^.\s/,/^,\s/];
    for (var i = 0; i < ucpa.length; i++){
        var str = str.replace(ucpa[i], " ");
    }
    return str;
}

精致:

function removeCharacters(str){
    var pattern = /[{}]|-{1,3}|^[.,]\s/g;
    str = str.replace(pattern, " ");
    return str;
}

【问题讨论】:

    标签: javascript regex arrays function loops


    【解决方案1】:

    RegExp 构造函数采用原始表达式,而不是包裹在 / 字符中。 因此,您所有的正则表达式都包含两个 /s,这不是您想要的。

    相反,您应该创建一个实际的正则表达式文字数组:

    var ucpa = [ /.../g, /",\/.../g, ... ];
    

    【讨论】:

    • 哇,我的印象是数组中的/^,\s/ 不受引号约束会破坏数组。应该先测试一下。谢谢。
    【解决方案2】:

    您也可以将所有内容包装到一个正则表达式中:

    var str = str.replace(/[{}]|-{1,3}|^[.,]\s/g, " ")
    

    虽然我不确定这是否正是你想要的,因为你的一些正则表达式是无意义的,例如 ,^\s 永远不会匹配。

    【讨论】:

    • 错字对不起!意思是^,\s。我不喜欢使用数组的部分原因是你很容易放错逗号。单个正则表达式摇滚!
    • @ThomasReggi:在逗号之间放置空格,使其更清晰
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    相关资源
    最近更新 更多