2015-09-03 75 views
2

我正在嘗試使用JavaScript String.replace方法來操作降價代碼。我想讓所有的標題都是統一的,所以我需要採用各種各樣的##,###,####等組合,並在它們之後放置一個空格。如何用REGEX替換未知數量的相同字符?

所以 - 「##」 變成 「##」 和 「####」 變成 「####」 等

我想使用全局標誌:

md.replace("/#/g", "# "); 

這不會考慮所有這些散列符號的組合。我怎樣才能做到這一點?

+0

也許,'MD = md.replace(/#+ /克,「$ & ');'將工作最適合你的。 –

回答

5

您可以使用:

md = md.replace(/(#+)/g, '$1 '); 

#+將匹配1更#和組作爲$1和更換隻是'$1 '將多後添加一個空格#

+1

感謝你爲這個。真是棒極了!我增加了 「G」 到最後也以確保它處理所有實例 – Arun

+0

對於多個(全局)替換是的'g'需要 – anubhava

1

一種方法是:

md = md.replace(/([#])([^# ])/g, '$1 $2'); 

([#])檢查#([^# ])檢查除散列或空格以外的任何內容。然後在它們之間增加一個空格。因此,額外的空間不會被添加到### a形式的字符串中。

+0

有趣的替代方案不確定它是否真的更高效,並且稍微難以閱讀 – Sam

0

您可以使用下面的正則表達式替換的兩個或兩個以上連續#字符的發生:

// Two or more # characters 
md = md.replace(/(#{2,})/, "$1 ") 

// One or more # characters 
md = md.replace(/(#+)/, "$1 ") 

如果要追加一個#字符後面輸入一個空格,以及,你可以改變量詞從{2,}到簡單的+

+0

我認爲他仍然有1次,但很難說... – Sam

2

我會後我的建議,因爲我也已經準備好文章,但看到一些答案後,在第一扣:

md = md.replace(/#+/g, '$& '); 

我覺得這個人是更好,因爲:

  • 它採用g選項將在輸入字符串中處理所有### s
  • 它不使用當我們想用整個匹配文本替換時不需要的捕獲組($&反向引用實際上是整個比賽)。捕獲組會將捕獲的文本保存在堆棧中,這可能比沒有它們的文件慢一些。在這裏,我們不需要捕獲組,爲什麼使用它們呢?
+0

*我最後加了「g」,以確保它處理所有實例。* - 這正是我在我的評論中提出的建議。 –

+1

很好的使用'$&' - 總是忘記這一點。 – Sam

相關問題