從我的previous question有關正則表達式的問題。我被困住瞭解我得到的結果的差異,而且我擔心如果解析庫或其他東西時可能存在錯誤。由regex101.com忽略的未捕獲組
因此,最初的問題是,以取代所有:/
在給定的字符串,除了那些可能是給定字符串中的內部標籤。初始的字符串是
not feeling well today :/ check out this link <a href="http://example.com">http://example.com</a>
我曾嘗試使用下面的正則表達式中給出的例子僅替換第一:/
。要跳過occurances內標籤非捕獲組用於:
/(?:<[^\/]*?.*?<\/.*?>)|(:\/)/g
什麼是最令人驚訝的是,這個正則表達式給出了不同的結果取決於刀具/語言被使用。下面是我
- regex101.com結果的簡要說明比賽!
- regexpal.com顯示比賽
- regexr.com顯示比賽
- regextester.com顯示比賽
下面還有一段JavaScript代碼來檢查相同的正則表達式,結果,因爲你可以看到與預期的不同 - 2個匹配 - > 2個替換將發生。
var s = 'not feeling well today :/ check out this link <a href="http://example.com">http://example.com</a>';
var replaced = s.replace(/(?:<[^\/]*?.*?<\/.*?>)|(:\/)/g, "smiley_image_here");
document.querySelector("pre").textContent = replaced;
<pre></pre>
看來,非捕獲組會被忽略。 那麼,什麼是錯誤的,爲什麼結果不同,什麼是正確的正則表達式來解決最初的問題?
似乎並非如此,因爲特別是名爲「匹配信息」的部分只顯示一個匹配 – kaytrance