![](/img/trans.png)
[英]Using javascript and regex to limit replacement and capture within a specific html tag
[英]javascript to wrap specific text using regex capture but exclude html tag attributes
我已經用Regex定位了字母數字字符串,這些字母數字字符串是產品編號(所有都是長度的CAP /數字組合),這些產品編號以粗體標記包裝成數百個生成的HTML電子郵件。
這對於大膽的產品編號非常有用,但也可以在HTML電子郵件的標簽屬性中捕獲URL的隨機部分和十六進制顏色。
我試圖排除十六進制顏色,只在“>”之后和“ <”之前包括文本。 這些似乎並未忽略某些URL和十六進制顏色。 示例...來自此正則表達式並替換語法:
var newHtml = html.replace(new RegExp(/([0-9][^ ]*[A-Z][^ ]*)|([A-Z]
[^ ]*[0-9][^ ]*)(?=[^<|<|http|#]*(>|>|$))/g),"
<strong>$1</strong>");
and this text, from which I only want to wrap 09D623 that appears outside of tags:
Lorem ipsum <a href="http://www.example.com/09D623" target="blank"
style="color: #66BB12;">dolor sit</a> amet, 09D623 non pulvinar nunc
egestas. Nunc sit amet imperdiet 09D623 magnat.
我仍然捕獲66BB12,標記內的十六進制顏色以及該顏色后面的多余字符,以及隨機URL(如果它們包含大寫字母/數字),例如本示例。 我嘗試使用以下方法排除十六進制顏色:^(#[0-9a-f] {3} | [0-9a-f] {6})$
並分別使用以下表達式標記內容:(?!([^ <] +)?>)
但這些似乎都無法按預期工作。 我什至不確定我的exclude表達式是否正確—當它遵循該表達式時,我首先遵循了新的RegExp...。
多謝您分享的見解...
我對字符串的了解還不足以更好地對此進行概括,但它與示例中要查找的內容匹配:
var email = 'Lorem ipsum <a href="http://www.example.com/09D623" target="blank" style="color: #66BB12;">dolor sit</a> amet, 09D623 non pulvinar nunc egestas. Nunc sit amet imperdiet 09D623 magnat.';
var modded = email.replace(/(\s\d+[A-Z]+\d+\s)/g, "<strong>$1</strong>");
document.write(modded);
因此,您的正則表達式似乎要復雜得多:
\\s([0-9A-Z]{2,})\\s
可以完美匹配示例中的所需內容:
查找任何由空格包圍的2個或更多匹配字符,並且僅捕獲數字。
您還可以在邊緣添加允許的標點符號,但是只要不使用#
或;
,它與十六進制不匹配:
[.,-"' ]([0-9A-Z]{2,})[.,-"' ]
將匹配大多數其他可能接近產品編號的選項
如果要根據>
和<
:
>[^<]*?([0-9A-Z]{2,})(?:[^<]*?([0-9A-Z]{2,}))*
這樣一來,它就可以通過任何非標記字符串查找任意數量的產品編號,並且每個><
返回最多2個結果。 如果需要更多,則可以鏈接更多,但是正則表達式捕獲組就是這樣做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.