2011-07-24 283 views
0

我试图创建一个函数来替换数组中的多个正则表达式值。这适用于数组不包含任何类型的引号,这是有问题的,当我想在我的模式中使用逗号。所以我一直在试图找到一种替代方式来服务这种模式,但没有运气。有任何想法吗?带正则表达式的Javascript正则表达式阵列

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

回答

3

你也可以换全部成一个单一的正则表达式:

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

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

+0

错别字对不起!意思是'^,\ s'。我不喜欢使用阵列的部分原因是因为您可能容易错位逗号。单一的正则表达式岩石! – ThomasReggi

+0

单个正则表达式的+1。 – jfriend00

+0

好吧,现在它是有道理的。 +1 – ridgerunner

5

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

相反,你应该使实际正则表达式文字的数组:

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

Woah,我的印象是数组中的'/ ^,\ s /'不受引号限制会破坏数组。应该先测试一下。谢谢。 – ThomasReggi

相关问题