2 回答

TA貢獻1785條經驗 獲得超4個贊
如果您想保留單詞的第一次出現并刪除后續出現,那么它會變得更加復雜??赡苡斜任蚁氤龅母唵蔚臇|西,但它確實有效:
function rep()
{
const final = 'aaa bbb foo ccc bbb bbb bbb bar ddd foo bar aaa bbb';
let result = final;
for (;;) {
let m = result.match(/(\b(?!foo|bar)\S+\b)(?:.+)(\b\1\b)/i);
if (!m) {
return result.replace(/\s+/g, ' ').trim();
}
let s = m[1];
let index = m.index;
/* replace all occurences of s: */
let regex = new RegExp("\\b" + s + "\\b", "gi");
result = result.replace(regex, "");
/* put pack first occurence */
result = [result.slice(0, index), s, result.slice(index)].join('');
}
}
console.log(rep());

TA貢獻1788條經驗 獲得超4個贊
對這些詞中的任何一個進行否定預測,在一個組內交替。請注意,.匹配任何字符(換行符除外),這可能是不可取的 - 因為您想匹配words,可能更好地使用[a-z]or \S(非空白字符)或類似的東西。
例如,以下刪除重復的單詞(只留下任何特定單詞的最后一次出現),除了始終保留的foo和出現bar。
const final = 'aaa bbb foo ccc bar ddd foo bar aaa bbb';
let res = final.replace(/(\b(?!foo|bar)\S+\b)(?=.*\b\1\b)/gi, "").trim();
console.log(res);
確保\b
在反向引用周圍使用。
添加回答
舉報