使用jquery变量替换句点、冒号或任何其他字符的通用regexp



我有一个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

现场演示

相关内容

最新更新