我试图创建一个可以替换数组中多个正则表达式值的函数。如果数组不包含任何类型的引号,这是有效的,当我想在我的模式中使用逗号时,这是有问题的。所以我一直试图找到另一种服务模式的方法,没有运气。有什么想法吗?
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;
}
答案 0 :(得分:5)
RegExp
构造函数采用原始表达式,不包含在/
个字符中。
因此,您的所有正则表达式都包含两个/
个,这不是您想要的。
相反,你应该制作一组实际的正则表达式文字:
var ucpa = [ /.../g, /",\/.../g, ... ];
答案 1 :(得分:3)
您还可以将所有内容包装到单个正则表达式中:
var str = str.replace(/[{}]|-{1,3}|^[.,]\s/g, " ")
虽然我不确定这是否正是你想要的,因为你的一些正则表达式是荒谬的,例如,^\s
永远不会匹配。