我在html中替换单词有一个小问题。
<p id ="demo">Hello, Hello how are you! </p>
我想要这样的最终结果: 你好,你好!
它应该过滤它以删除重复的项目,然后再加入它们。
var span = document.getElementById('demo'),
text = span.innerHTML.split('').filter(function (allItems,i,p) {
return i == p.indexOf(allItems);
}).join('');
span.innerHTML = text;
<p id ="demo">Hello, Hello how are you </p>
答案 0 :(得分:1)
这应该有效:
var span = document.getElementById('demo'),
text = span.innerHTML.split(/(\W+)/).map(function(currValue, i, array) {
if (i == array.indexOf(currValue) || i % 2)
return currValue;
return '';
}).join('');
span.innerHTML = text;
<p id="demo">Hello, Hello how are you! </p>
它按任意序列的非单词字符分割,然后映射数组,如果重复该项,则返回空字符串,否则返回项目。我还保存了分隔符,以便以后可以恢复它们 - 因此检查i % 2
(如果它是一个分隔符总是返回它 - 我们不想过滤它们)。
答案 1 :(得分:0)
您可以捕获每个单词,如果尚未找到该单词,请将其添加到唯一项目列表中。如果找到该单词,请将其替换。
function dedupe(string) {
var unique = [];
return string
.replace(/[a-z]+/gi, function(m) {
if (unique.indexOf(m) < 0) {
unique.push(m);
return m;
}
return '';
})
.replace(/\s+/, ' ');
}
let fixed = dedupe('Hello, Hello how are you!');
console.log(fixed);