我有一个jquery代码,它修剪了前导和尾随字符(从调用程序传递)。我在RegExp中使用一个变量将字符替换为空白。如何使RegExp适用于从调用程序传递的任何字符?这是简化的代码:
var time = ":1h:45m:34s:";
var chr= ':'; //can have . or , or any other character
var regex = new RegExp("(^" + chr + ")|(" + chr+ "$)" , "g"); //works for colon but not for dot.
//var regex = new RegExp("(^/" + chr + ")|(/" + chr+ "$)" , "g"); //for dot I added / but not for colon.
var formattedtime = time.replace(regex, "");
预期输出:
1. time = ":1h:45m:34s:";
chr = ":";
Output: 1h:45m:34s
2. time = "1h:45m:34s";
chr = ":";
Output: 1h:45m:34s
3. time = ".45m.34s";
chr = ".";
Output: 45m.34s
4. time = "1h.45m.34s.";
chr = ".";
Output: 1h.45m.34s
如何使regexp适用于任何字符?
您需要转义元字符(如.
和其他几个)才能获得文本。你可以通过在它们前面添加一个反斜杠来实现这一点。
JS没有任何内置的函数,所以你可以使用这个:
function quotemeta(str){
return str.replace(/[.+*?|\^$(){}[]-]/g, '\$&');
}
像这样使用:
new RegExp("^(?:" + quotemeta(chr) + ")+|(?:" + quotemeta(chr) + ")+$" , "g");
var chr= ':/';
...
var regex = new RegExp("(^[" + chr + "])|([" + chr+ "]$)" , "g");
Regex应该这样:-
对于Colon,/^(:)|(:)$/gim
对于点,/^(.)|(.)$/gim
或
/^(:|w|.)|(:|w|.)$/gim
现场演示