所以我想寫一個正則表達式的JavaScript,這將允許我用標籤替換**作爲一種自卷降價到HTML轉換器。正則表達式沒有倒標記Markdown加密
例如
**bold**
- ><strong>bold</strong>
但
\**not**
- >**not**
因爲*
被逃脫。
我有以下的正則表達式,似乎運作良好:
/(?<!\\)(?:\\\\)*(\*\*)([^\\\*]+)(\*\*)/g
然而,JS不支持lookbehinds!我重寫它使用向前看符號:
/(\*\*)([^\\\*]+)*(\*\*)(?!\\)(?:\\\\)*/g
但是這需要我去扭轉,因爲我需要支持多字節字符(see here),這是不可取的字符串。我並不完全反對使用該答案中提到的庫,但我更喜歡一種解決方案,如果可能的話,不需要我添加一個。
有沒有辦法重寫我的正則表達式而不使用後視?
編輯:
思考這個多一點之後,我甚至開始懷疑正則表達式是偶數解決這個問題的最好方法,但我會離開的問題了出於興趣。
應該採取什麼結果給予輸入'** * foo的**吧'或'** FOO \ ** **吧' ? –
我預計分別爲'foo * bar'和'foo \ ** bar'。我的正則表達式很可能不包括所有的情況,因爲我還沒有能夠測試它。我不太在意缺少邊緣案例,更關心用正面背景編寫正則表達式,但指出遺漏案例仍然有幫助,所以謝謝!我也不是超級,超級關心邊緣案例,因爲這是在一個管理工具中使用,在這種管理工具中,這樣的奇怪情況並不是真正的問題。 – thatidiotguy
你真的期望格式不正確的字符串嗎?你知道,即使一個正確的解析器會產生不正確的結果,如果你的字符串格式不正確。試試https://regex101.com/r/J8imcO/1 –