![](/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.