2012-03-08 14 views
1

我有一個jQuery代碼,修剪前導和尾隨字符(從調用程序傳遞)。我在RegExp中使用一個變量來替換空白字符。我如何使RegExp適用於從調用程序傳遞的任何字符?下面是簡化的代碼:通用正則表達式使用jQuery變量替換點,冒號或任何其他字符

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 

我怎麼能做出任何字符的正則表達式的工作?

+0

什麼是您預期的輸出? – 2012-03-08 15:29:13

+0

將其添加到OP。 – 2012-03-08 15:33:22

回答

2

您需要轉義元字符(如.和其他幾個字符)以獲取文字。你可以在它們之前加一個反斜槓。

JS沒有任何內置該功能,所以你可以這樣做:

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

使用像這樣:

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

我在代碼片段中的註釋行中這樣做了。 var regex = new RegExp(「(^」+ chr +「)|(/」+ chr +「$)」,「g」);'這適用於dot,但不適用於冒號。你的意思是我必須檢查字符併爲每個字符轉義? – 2012-03-08 15:33:53

+0

'/'不是反斜槓,'\'是。但是你不能在每個角色上使用它,因爲它們有特殊的含義,例如'\ s'意味着任何空格。 – Qtax 2012-03-08 15:37:30

+0

啊,這個實用方法很好。它可以處理很多字符。更通用的方法。我如何理解您提供的RegExp? – 2012-03-08 15:51:50

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

這是一個很酷的解決方案。這個對我有用。我對RegExp不太瞭解。你介意解釋這個嗎? – 2012-03-08 15:38:06

+0

-1,它與'.'一起使用,但會因爲']而中斷。 – Qtax 2012-03-08 15:38:52

+0

使用[]定義一組字符,例如[:/。]匹配:/或。 – 2012-03-08 15:42:17

0

正則表達式應該是這樣的: -

對於冒號,/^(\:)|(\:)$/gim

對於點,/^(\.)|(\.)$/gim

OR

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

LIVE DEMO

+0

-1,不適用於字母,例如'/ ^(\ d)|(\ d)$/gim' – Qtax 2012-03-08 15:40:28

相關問題