簡體   English   中英

JavaScript.Replace包含在HTML標記之外的美元符號($)的內容

[英]JavaScript.Replace content wrapped in dollar signs ($) outside of HTML tags

注意:我沒有嘗試使用正則表達式解析HTML

我正在嘗試用字符串替換$ signs($例如$)中包含的任何內容。 我已經設法提出了str.replace(/\\$([^\\$]*)\\$/g), "hello $1!") ,但是我遇到了確保不更換的問題將這些字符串包裝在HTML標記中時。

示例字符串: $someone$, <a>$welcome$</a>, and $another$

表達式: /[^>]\\$([^\\$]*)\\$[^<]/g

預期輸出: hello someone!, <a>$welcome</a>, and hello another!

實際輸出: $someonhello , !elcomhello , and !nother$

測試代碼: alert("$someone$, <a>$welcome$</a>, and $another$".replace(/[^>]\\$([^\\$]*)\\$[^<]/g, "hello $1!"));

小提琴: http//jsfiddle.net/WMWHZ/

謝謝!

請記住,您的測試用例中有6個'$'。 這里的問題是,當你試圖檢查前一個字符是不是'>'時,正則表達式向前移動並匹配第4和第5美元符號之間的內容,捕獲"</a>, and "並且制作一個一塌糊塗。

試試這個:

$('div').text(test.replace(/(^|[^>])\$([^<][^\$]*)\$(?!<)/g, "$1hello $2!"))​

Javascript不支持正則表達式中的lookbehinds,但它確實支持lookaheads( (?!<)部分)。 為了模仿lookbehinds,你正確地嘗試將[^>]放在美元之前,但是然后匹配該字符,所以你必須抓住它並將它再次放入字符串中。

你只需要稍微改進一下,因為如果'$'位於字符串的開頭,則不會捕獲該組。

另外,為了避免上述問題,你應該檢查第一個美元之后是否沒有'<',所以我在捕獲組的開頭放了一個[^<] 這也意味着它不會在美元符號之間捕獲空字符串(如'$$'),它們必須包含至少一個字符。

這樣,您就獲得了預期的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM