JS正则表达式合并

时间:2018-07-18 10:39:55

标签: javascript regex string

我有这样的字符串,要求排除任何内容

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/,.?/"

1 个答案:

答案 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+个字符

请参见regex demo online