2017-09-14 59 views
1

我需要將HTML字符串的內容從一個<br>替換爲兩個。但我無法實現的是,當我有一波未平一個標籤:正則表達式替換第一個元素

(<br\s*\/?>)

將匹配所有的標籤這樣的文字:

var text = 'text<BR><BR>text text<BR>text;' 

將匹配與替換我會有

text = text.replace.replace(/(<br\s*\/?>)>/gi, "<BR\/><BR\/>") 

console.log(text); //text<BR/><BR/><BR/><BR/>text text<BR/><BR/>text;" 

有沒有辦法只增加一個標籤與正則表達式?並實現這一點:

console.log(text); //text<BR/><BR/><BR/>text text<BR/><BR/>text;" 

或者我只會實現這一循環?

+0

你想在更換硬盤代碼''
?難道你不想只添加序列中最後使用的「br」嗎?我剛剛試過並得到了'文本


文本文本

文本;' –

+0

你想要輸出什麼? – Durga

+0

文本


文本文本

text; –

回答

2

您可使用

var text = 'text<BR><BR>text text<BR>text;' 
 
text = text.replace(/(<br\s*\/?>)+/gi, "$&$1"); 
 
console.log(text); // => text<BR><BR><BR>text text<BR><BR>text;

這裏,(<br\s*\/?>)+/gi比賽1或<br> S比序列在不區分大小寫的方式,同時捕捉的道路上的每個標籤(保持在最後一個值該組在最後一個beffer之後,並且"$&$1"將替換整個匹配($&)並且將最後一個<br>$1相加

或者

var text = 'text<BR><BR>text text<BR>text;' 
 
text = text.replace(/(?:<br\s*\/?>)+/gi, function ($0) { 
 
return $0.replace(/<br\s*\/?>/gi, "<BR/>") + "<BR/>"; 
 
}) 
 
console.log(text); // => text<BR/><BR/><BR/>text text<BR/><BR/>text;

這裏,(?:<br\s*\/?>)+也將匹配1角或多個<br>秒,但沒有捕捉每一次出現,並且回調裏面,所有<br>旨意得到標準化爲<BR/><BR/>將被附加到結果。

0

可以使用負前瞻(<br\s*\/?>)(?!<br\s*\/?>)/遞增只有最後一個標籤,如果有任何連續:

var text = 'text<BR><BR>text text<BR>text;' 
 

 
text = text.replace(/(<br\s*\/?>)(?!<br\s*\/?>)/gi, "<BR\/><BR\/>") 
 

 
console.log(text);