我有这样的字符串,要求排除任何内容
a-zA-Z0-9
特殊字符
()+-。,‘?/:
也应限制双斜线或更多斜线 并且字符串不应以斜杠开头和结尾。
示例:
var str = "///a/ab*/*/bc:dD:123a///'Ad/,.?/!//";
//if I use js replace with regex rule twice I get needed result
"///a/ab*/*/bc:dD:123a///'Ad,.?/!//"
.replace(/[^0-9a-zA-Z()+-.,‘?/:]/g, "")
.replace(/[^\/+|\/+$|\/{2,}]/g, "");
//result
"a/abbc:dD:123aAd/,.?"
**Is it possible to combine these rules into one regex rule?!**
//tried to combine these rules by '|' but get failure result
"///a/ab*/*/bc:dD:123a///'Ad/,.?/!//"
.replace(/([^0-9a-zA-Z()+-.,‘?/:])|^\/+|\/+$|\/{2,}/g, "")
//result
"a/ab//bc:dD:123aAd/,.?/"
答案 0 :(得分:1)
您可以使用
var str = "///a/ab*/*/bc:dD:123a///'Ad/,.?/!//";
var na = "[^0-9a-zA-Z()+.,‘?/:-]+";
var reg = new RegExp("/+$|^/+|(^|[^/])/(?:" + na + "/)*/+$|/{2,}|/(?:" + na + "/(?!/))+|" + na, "g");
console.log(str.replace(reg, "$1"));
详细信息
/+$
-字符串末尾有1个以上的/
字符|
-或^/+
-在字符串的开头匹配1+ /
|
-或(^|[^/])/(?:[^0-9a-zA-Z()+.,‘?/:-]+/)*/+$
-字符串的开头或任何非/
字符(捕获到$1
中),后跟/
,后跟1个或多个重复的1个以上其他字符而不是字符类中的集合/范围,并且/
后面不跟另一个/
,然后在字符串末尾加上1+ /
|
-或/{2,}
-任何两个或更多斜杠|
-或/(?:[^0-9a-zA-Z()+.,‘?/:-]+/(?!/))+
-一个/
,其后跟1个或多个1+个字符的重复字符,而不是字符类中的集合/范围,另一个/
不跟另一个{{1} } /
-或|
-字符类中的集合/范围之外的1+个字符