2013-08-02 64 views
2

例如,我有一個sourceString : 1234\n\n\n\n5678正則表達式的第一2 n中的 n內asequence

和,我想一個\n序列必須等於或內更換第一2 \n超過2個字符

所以,我希望得到的結果去 : 1234TEST\n\n5678

我試過 : (^|[^\n])\n{2}

和實際的結果是:123TEST\n\n5678

http://regex101.com/r/cS6uG3

這有什麼錯我的代碼?

基本思想來自@Tim Pietzcker關於我上一個問題的教程。

謝謝。

Regex to match single new line. Regex to match double new line

+0

所以你要替換的前兩個'\ n '人物即使只有兩個?例如,'1234 \ n \ n5678'變成'1234TEST5678'? – matts

回答

1

這到底是怎麼發生的是:

(^|[^\n])\n{2} 
^-------^ -- this part 

比賽4,它的更換。您需要將其重新包含在替代品中。

var string = "1234\n\n\n\n5678"; 
string.replace(/(^|[^\n])\n{2}/g, "$1TEST"); 
            ^^-- back-reference 
+0

謝謝,Frits。你的回答非常清楚。隨着我以前的帖子,我明白。 –

2

這種積極的前瞻基於正則表達式應該工作:

var repl = "1234\n\n\n\n5678".replace(/\n{2}(?=\n{2,})/, "TEST"); 

/\n(?=\n{2,})/意味着比賽\n\n如果緊跟2個或更多\n

+0

這似乎並不奏效,我在測試時會得到'1234TEST \ n \ n \ n5678'(一個'\ n'太多了)。 – Halcyon

+0

對不起,早先誤讀了要求,做了一個更正,現在檢查一下。 – anubhava

+0

謝謝,雖然我從Frits得到了一個正確的想法。 –