2015-02-06 75 views
1

我知道這將是一個非常明顯的答案,但我無法找到關於如何執行此操作的任何內容。JavaScript中的遞歸正則表達式

我想要的HTML字符串內UNESCAPE <>

我的測試輸出字符串基本上是:

```php 
&gt;h2&lt;Heading2&gt;/h2&lt; 
``` 

`&gt;h2&lt;Heading2&gt;/h2&lt;` 

&gt;h2&lt;Heading2&gt;/h2&lt; 
在這個例子中

因此,我們有GitHub風格降價,定期code降價片段,然後所有原始文本都使用相同的HTML標記。我想要使​​用原始標籤(第三個標籤)實際上成爲一個鏈接。理想的輸出將是這樣的。

```php 
&gt;h2&lt;Heading2&gt;/h2&lt; 
``` 

`&gt;h2&lt;Heading2&gt;/h2&lt;` 

<h2>Heading2</h2> 

我陷入了在同一行中獲取多個&gt;

當前正則表達式:

/(?:.*?(&gt;))/ 

這將讓中的第一項。

/(?:.*?(&gt;))/g 

這一個得到第二個條目。我希望它能夠獲得每個條目。然後,這只是一個扔剔件的問題。

/(?:```|`)(?:.*?(&gt;)).*?(?:```|`)/gs 
+0

我只能更換''>是不在'\'''''這裏} \'\''''和'\'{here} \'' – 2015-02-06 21:25:44

回答

2

如果你在使用正則表達式完成這個任務打算,可以考慮以下因素:

var r = s.replace(/((`(?:``)?)[^`]*\2)|&gt;/g, '$1<') 
     .replace(/((`(?:``)?)[^`]*\2)|&lt;/g, '$1>') 
     .replace(/`[<>]+/g, '`'); 

Working Demo

+0

謝謝hwnd!請問爲什麼第二次更換是必要的?我看到了這個問題,但是我想知道如果我們能夠在尾部打勾後不添加<<。 – 2015-02-06 21:47:41

+0

無論哪種方式,這將解決它,我認爲,只需要運行第二個'<'取代'$ 1>' – 2015-02-06 21:48:12

+1

@EricHolmes我已經編輯了一個整體解決方案的答案。 – hwnd 2015-02-06 22:36:09