簡體   English   中英

javascript使用正則表達式捕獲來包裝特定文本,但排除html標簽屬性

[英]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][^ ]*)(?=[^<|&lt;|http|#]*(>|&gt;|$))/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...。

多謝您分享的見解...

測試位於https://regex101.com/r/rW6iL6/13 regex101的測試結果,顯示藍色突出顯示的匹配項

我對字符串的了解還不足以更好地對此進行概括,但它與示例中要查找的內容匹配:

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.

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