2016-07-21 19 views
-1

分隔的Javascript正則表達式匹配捕捉我喜歡由字符

classifier1:11:some text1##classifier2:fdglfgfg##classifier3:fgdfgfdg##classifier4 

字符串我試圖捕捉象classifier1方面:11,classifier2 :, classifier3和classifier4

所以這些分類可以後跟一個分號或不是。

到目前爲止,我想出了

/([^#]*)(?::(?!:))/g 

但是,這似乎並沒有捕捉到classifier4,不知道我在這裏失去了對你的模式

+0

嘗試['([^#] +)(::(?:?!)| $)'](https://開頭regex101的.com/R/oL6kQ0/2)。你爲什麼使用這個lookahead?看起來你也可以使用'([::#] +)(?:: | $)' –

+1

這是因爲'classifier4'後面沒有冒號(':') –

+0

你的意思是可能有情況像'classifier1 :: 11 :: xxxx'? 'classifier1 :: 11 :: some text1 ## classifier2'的預期結果是什麼? –

回答

1

您的案例中的分類器似乎包含任何可能具有單個:且以數字結尾的單詞字符。

因此,你可以使用

/(\w+(?::+\w+)*\d)[^#]*/g 

regex demo

說明

  • (\w+(?::+\w+)*\d) - 第1組捕獲
    • \w+ - 1以上[a-zA-Z0-9_](字)字符
    • (?::+\w+)* - 1+ :的Zero或多個序列,然後1+字字符
    • \d - 一個數字應該在這個組的末尾
  • [^#]* - 除分隔符#以外的零個或多個字符。

JS:

var re = /(\w+(?::+\w+)*\d)[^#\n]*/g; 
 
var str = 'classifier4##classifier1:11:some text1##classifier2:fdglfgfg##classifier3:fgdfgfdg\nclassifier1:11:some text1##classifier4##classifier2:fdglfgfg##classifier3:fgdfgfdg##classifier4'; 
 
var res = []; 
 
    
 
while ((m = re.exec(str)) !== null) { 
 
    res.push(m[1]); 
 
} 
 
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";

1

基礎,你可以使用正則表達式是這樣的:

([^#]*)(?::|$) 

Working demo

+0

這適用於此模式,但如果classifier4出現在字符串之間或字符串的開始處? like classifier4 ## classifier1:11:some text1 ## classifier2:fdglfgfg ## classifier3:fgdfgfdg'或'classifier1:11:some text1 ## classifier4 ## classifier2:fdglfgfg ## classifier3:fgdfgfdg' –

+0

@AnandSunderraman,is classifier一個文字字符串。你可以使用'(classifier \ d +:?\ d *)'?.你如何區分'text1'和'classifier1'? –

+0

沒有分類器不是一個文字字符串,它可以是任何東西 –