2015-06-30 19 views
1

我有以下字符串:的Javascript替換功能無法與正則表達式的工作

@[A:B:C].[X:Y:Z].[P:Q:R] 1.C.3.s @[1:2:3].[2:0:0].[5dsh:cxcv:wew] 

我想提取從這些是在以下格式的子串:

@[anything here].[anything here].[anything here] 

在上述情況下,輸出子 - 字符串應該是:

@[A:B:C].[X:Y:Z].[P:Q:R] 
@[1:2:3].[2:0:0].[5dsh:cxcv:wew] 

我有這個正則表達式匹配這些子字符串:

(@\w+|@(?:\[[^\]]+\]\.?)+) 

爲了測試這個正則表達式我與$在這個小提琴替換這些子串:http://jsfiddle.net/vfe50z0o/

有正則表達式沒有問題,因爲它是在這個Regex101演示工作:https://regex101.com/r/aH9nK5/1

但在JSFiddle上無法正常工作。

這是JavaScript代碼:

function myFunction() { 
    var re = /(@\w+|@(?:\[[^\]]+\]\.?)+)/; 
    var str = '[email protected][s].[s].[s]xvcv'; 
    var subst = '$'; 
    var result = str.replace(re, subst); 
    alert(result); 
} 
+1

小提琴不起作用,因爲你已經把你的功能在「負載」處理程序,因此它不是全局的,所以事件處理程序失敗。將小提琴設置更改爲「nowrap - in body」,你的小提琴可以正常工作。 – Pointy

+0

@Pointy謝謝你解決了這個問題。添加它作爲答案我會標記。 –

回答

0

如果你正在處理這樣的格式字符串以下的正則表達式可以做這項工作:

(@?\[[^[]*\]\.?){3} 

Demo

如果括號的數量可以大於或小於3您可以使用+

(@?\[[^[]*\]\.?)+ 
0

您可以使用此代碼來獲取你的比賽:

var re = /(@\w*(?:\[[^\]]+\]\.?)+)/g; 
var str = '@[A:B:C].[X:Y:Z].[P:Q:R] 1.C.3.s @[1:2:3].[2:0:0].[5dsh:cxcv:wew]'; 
var m; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) 
     re.lastIndex++; 
    console.log(m[1]); 
} 

輸出:

@[A:B:C].[X:Y:Z].[P:Q:R] 
@[1:2:3].[2:0:0].[5dsh:cxcv:wew] 
相關問題