2014-02-06 45 views
0

基本上,我爲自己的網站開發了Markdown引擎。javascript正則表達式:`foo` - > ** foo **?

現在,我想那是包裹着單`

`foo` 

**foo** 

使用regex,到目前爲止,所有我能想到的是

任何字符串轉換
var data = data0.replace(/`.*`/g, '...'); 

顯然,這不適合我的意圖。

和降價也有

``` ``` 

格式,我想這untouched-從正則表達式匹配排除。

你能建議什麼是正則表達式嗎?

謝謝。

+0

''會發生什麼? –

回答

-1

這是我嘗試在一個簡單,乾淨的正則表達式:

正則表達式字符串

`\b(.*?)\b`(?!`) 

替換字符串

**$1** 

在線演示

Regex101

+1

這排除了許多有效的匹配。例如,它需要一個反引號括起來的字符串,始終以ASCII字母/數字/下劃線開頭和結尾。 –

+0

謝謝。我喜歡簡單,你的答案是檢查。 –

+0

@KenOKABE:不過,這種簡單性讓它錯了。 –

2

由於JavaScript不支持向後斷言,我們需要用一個小技巧:

result = subject.replace(/(^|[^`])`([^`]*)`(?!`)/g, '$1**$2**'); 

看到它live on regex101.com

說明:

(^|[^`]) # Match the start of the string or any non-` character. 
`  # Match ` 
([^`]*) # Match any number of non-` characters 
`  # Match ` 
(?!`) # Assert that no ` follows 
+0

謝謝,但'$ 1 ** $ 2「」'顯然是錯字。 –

+0

當然。是。 –

2

你可以嘗試這樣的事情:

var data = data0.replace(/(^|[^`].|.[^`])`([^`]+)`(?!``)/g, '$1**$2**'); 

jsfiddle

regex101 demo

由於JS沒有消極的後顧之憂,你必須訴諸於(^|[^].|.[^])之類的內容,以防止在第三個`之前匹配``

(?!``)然後阻止``在第4個`後匹配。

+0

這改變'「foo | bar |」'(爲了格式化原因,而不是反引號)到''fo ** bar **「'。 –

+0

@TimPietzcker我正在修復那個...:x – Jerry

+0

你的正則表達式保持不變。我不認爲這是理想的。 –

相關問題