通用正则表达式使用jquery变量来替换点,冒号或任何其他字符

时间:2012-03-08 15:26:00

标签: javascript jquery regex

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

如何让正则表达式适用于任何角色?

3 个答案:

答案 0 :(得分:2)

你需要转义元字符(如.和其他几个)来获取文字。你可以通过在它们之前添加一个反斜杠来实现。

JS没有任何内置函数,所以你可以使用它:

function quotemeta(str){
    return str.replace(/[.+*?|\\^$(){}\[\]-]/g, '\\$&');
}

像这样使用:

new RegExp("^(?:" + quotemeta(chr) + ")+|(?:" + quotemeta(chr) + ")+$" , "g");

答案 1 :(得分:0)

var chr= ':/';
...    
var regex = new RegExp("(^[" + chr + "])|([" + chr+ "]$)" , "g");

答案 2 :(得分:0)

正则表达式应该这样: -

对于Colon,/^(\:)|(\:)$/gim

对于Dot,/^(\.)|(\.)$/gim

/^(\:|\w|\.)|(\:|\w|\.)$/gim

<强> LIVE DEMO