[英]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.