带循环的Javascript正则表达式模式数组

时间:2011-07-24 04:35:17

标签: javascript regex arrays function loops

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

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

WORKING:

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

2 个答案:

答案 0 :(得分:5)

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

相反,你应该制作一组实际的正则表达式文字:

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

答案 1 :(得分:3)

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

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

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