我有以下字符串
class=use><em>use</em>
使用us
搜索时我想转换为
class=use><em><b>us</b>e</em>
我已经尝试过查找相关答案但我无法按照我想要的方式工作。我对this answer的回调方法特别感兴趣。
帮助表示赞赏
答案 0 :(得分:3)
这是编写正则表达式的一个很好的练习,这是一个可能的解决方案。
"useclass=use><em>use</em>".replace(/([^=]|^)(us)/g, "$1<b>$2</b>");
// returns "<b>us</b>eclass=use><em><b>us</b>e</em>"
([^=]|^)
确保任何匹配的us
的前缀不是等号,或者是字符串的开头。
正如@jamiec在评论中指出的那样,如果您使用它来解析/修改HTML,请立即停止。从数学上讲,用常规语法解析CFG是不可能的(即使使用增强的JS regexp,你也会花费很少的时间来实现它。)
答案 1 :(得分:2)
如果您可以对文档的结构做出任何假设,那么使用直接操作DOM元素的方法而不是使用正则表达式解析整个文档可能会更好。
使用正则表达式解析HTML有一些问题可能会很难处理。
var element = document.querySelector('em');
element.innerHTML = element.innerHTML.replace('us', '<b>us</b>');
<div class=use><em>use</em>
</div>
答案 2 :(得分:0)
我首先会查找除等号[^=]
以外的任何字符,并将其与括号分开,以便我可以在替换时再次使用它。然后围绕两个字符us
的另一组括号应该这样做:
var re = /([^=]|^)(us)/
这将为您提供两个捕获组(在括号内),您可以在替换字符串中使用$1
和$2
表示。
str.replace( /([^=|^])(us)/, '$1<b>$2</b>' );