我有以下字符串匹配一个词,除非它前面有一个等号?
class=use><em>use</em>
,当使用us
我想变成
class=use><em><b>us</b>e</em>
我试着寻找有关的答案,但我不能完全得到它的工作方式搜索我想要它。我特别感兴趣的是this answer的回调方法。
帮助表示赞赏
我有以下字符串匹配一个词,除非它前面有一个等号?
class=use><em>use</em>
,当使用us
我想变成
class=use><em><b>us</b>e</em>
我试着寻找有关的答案,但我不能完全得到它的工作方式搜索我想要它。我特别感兴趣的是this answer的回调方法。
帮助表示赞赏
这是一个很好的锻炼编写正则表达式,这里是一个可能的解决方案。
"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正则表达式,你也会尝试实现这一点很糟糕)。
我会先查找除等号[^=]
以外的任何字符,然后用括号,以便我可以在我的替代品中再次使用它。然后另一组的两个字符加上括号的us
应该这样做:
var re = /([^=]|^)(us)/
这会给你两个捕获组,(内括号),工作,你可以在你的替换字符串$1
和$2
代表。
str.replace(/([^=|^])(us)/, '$1<b>$2</b>');
尝试'str =“使用”',你的正则表达式将失败;) –
对。接得好。 – nwalton
如果你可以让你的文档结构的任何假设,您可以使用在DOM元素进行操作,而不是直接用正则表达式解析整个文档的方法会更好。
用正则表达式解析HTML有一些可能很难处理的问题。
var element = document.querySelector('em');
element.innerHTML = element.innerHTML.replace('us', '<b>us</b>');
<div class=use><em>use</em>
</div>
停止试图用正则表达式来解析HTML! – Jamiec
为了扩展我以前的评论,当有人来使用'class =“的(正确)格式时,使用”>“使用'您的正则表达式将失败,并且现在要处理更多的复杂问题,单引号,双引号,带空格的双引号等等等 – Jamiec