【发布时间】:2015-10-12 11:41:01
【问题描述】:
例如:
var htmlString = "It's a <span title='mark'>nice day</span> and also a <span title=''>sunny day</span>, it's day for surfing.";
想将最后两个单词“day”替换为“night”,并跳过第一个带有标签跨度标题“mark”的单词。
var replaceString = "day";
var reg=new RegExp("(?!title=\'mark\'>).*"+replaceString+".*(?!<\/span>)","gi")
var bb=htmlString.replace(reg,"night");
alert(bb)
// I can not get the right result with the above code
// Final result wanted: "It's a <span title='mark'>nice day</span> and also a <span title=''>sunny night</span>, it's night for surfing.";
更新:以下工作,但只匹配一个句子中的3个“天”,如何使它匹配不确定的“天”数?
alert(htmlString.replace(/(<span.*?'(?!mark)'>.*?)day(.*?<\/span>)|(?!>)day/gi, "$1night$2"));
谢谢。
【问题讨论】:
-
当您拥有 DOM 解析器触手可及时,尝试在 JavaScript 中使用正则表达式解析 HTML 会受到额外的惩罚。
-
每周至少一次,有人想将正则表达式与 HTML 或 XML 一起使用... 看在上帝的份上,不要这样做!
-
其实RegEx match open tags except XHTML self-contained tags中并没有提示如何在JS中解析(X)HTML。
-
@NiettheDarkAbsol 您提供给 OP 以提高他的知识的链接在哪里?
-
代码中有一个错字(relaceString 没有'p')。
标签: javascript html regex