我已经使用正则表达式定位字母数字字符串,这些字符串是产品编号(所有将是不同长度的CAP /数字组合),将这些产品编号包装为数百个生成的HTML电子邮件的粗体标记。
这非常适合大胆的产品编号,但也可以在HTML电子邮件的标记属性中捕获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,标签内的十六进制颜色以及颜色后面的额外字符,以及随机网址(如果它们包含大写/数字,例如此示例)。我尝试使用以下方法排除十六进制颜色: ^(#[0-9A-F] {3} | [0-9A-F] {6})$
并单独使用此表达式标记内容: (?!([^&LT;] +)&GT;?)
但这些似乎都没有按预期工作。我甚至不确定我的排除表达是否正确 - 当它跟随我开始的表达式时 跟随新的RegExp ......上面。
感谢您分享的任何见解......
答案 0 :(得分:0)
我不太了解字符串以更好地概括这一点,但它与您在示例中寻找的内容相匹配:
LongBool
答案 1 :(得分:0)
所以你的正则表达式似乎比它需要的复杂得多:
\s([0-9A-Z]{2,})\s
可以完美地匹配示例中您想要的内容:
查找任何匹配2个或更多字符长的空格包围并仅捕获数字。
您还可以在边缘添加允许的标点符号,但只要您不在#
或;
,它就不会与十六进制匹配:
[.,-"' ]([0-9A-Z]{2,})[.,-"' ]
将匹配产品编号附近的大多数其他选项
如果您想根据>
和<
的位置进行操作:
>[^<]*?([0-9A-Z]{2,})(?:[^<]*?([0-9A-Z]{2,}))*
这允许它查看任何数量的产品编号的非标记字符串,并且每><
最多返回2个结果。如果您需要更多,可以链接更多,但regex capture group就是这样。