我正在尝试找到一个正则表达式,以便在跨度中包含文本的所有单词。我使用以下代码:
$this.html($this.text().replace(
/([^\s]*\s)/g, "<span>$1</span>"));
其中这是一个div元素。然而,img和div中的元素消失了。我试图将正则表达式改为:
$this.html($this.text().replace(
/([^(\s | <a.*/a> | <img.*/img>)]*\s)/g, "<span>$1</span>"));
但我没有解决问题。
有人能帮助我吗?
答案 0 :(得分:-2)
用函数替换非空格(\S
),其中有一个或多个(+
),将匹配作为参数。
var str = 'Hello dear world <img src="https://placeholdit.imgix.net/~text?txtsize=60&txt=1&w=100&h=100"/> Hello dear world <img src="https://placeholdit.imgix.net/~text?txtsize=60&txt=1&w=100&h=100"/>';
function replaceThings(str) {
var pre = "<span style='background-color:yellow'>";
var modString = str
.replace(/\S+/ig, function(word) {
return pre + word + "</span>"
})
.split(pre + "<img").join("<img")
.split("/></span>").join("/>")
.replace(/<img{1}.*?\/>/ig, function (img){
return img.split(pre).join("").split("</span>").join("")
})
return modString;
}
console.log( replaceThings(str) );
document.body.innerHTML = replaceThings(str)