2012-04-16 16 views
1

我有一個js串...JS刪除不符合

var string = "Hi how are you <b>today</b>"; 

我現在有一個新的JS串...

var newstring = "are today"; 

某些話我想刪除所有來自var string的文字與var newstring不符。我還想保留與這些詞相關的標籤(如果有的話)。

Example Result: 
are <b>today</b> 
+0

你會想使用正則表達式,你會根據比較弦上飛建立,也將在perserving html標籤幫助但它可以是複雜的比簡單的任何其他html標籤。你可能需要逐字逐句將其分解,並檢查列表並查看是否可以解析出html。 – dennmat 2012-04-16 17:11:01

+0

如果您希望保留html標籤,請確保您的測試字符串也包含所需的標籤。這樣做的一個好方法是使用html()jquery方法。然後就像使用lneetho的回答一樣簡單,因爲標籤將以字符串形式返回。 – Jlange 2012-04-16 17:12:44

回答

3

有一些simpe辦法做這樣的事情,他們是否會爲你工作,取決於你打算用這個東西,但像這樣也許:

var string = "Hi how are you <b>today</b>", 
    newstring = "are today", 
    words = newstring.split(' '); 

for (var i=0; i<words.length; i++) { 
    var reg = new RegExp(words[i], 'gi'); 
    string = string.replace(reg, ''); 
} 

console.log(string);​ 

FIDDLE

+0

如果我想將var字符串組合成var而不是console.log(string);所以我可以輸出最終結果,那麼最好的方法是什麼? – Joe 2012-04-16 18:11:23

+0

變量字符串不是一個數組,你可以以任何你想要的方式輸出它,看到這個[FIDDLE](http://jsfiddle.net/adeneo/ddfeq/2/)。如果你還需要保留原始字符串,創建一個新的變量來替換等。 – adeneo 2012-04-16 19:01:06

+0

這是完美的adeneo謝謝 – Joe 2012-04-17 15:17:44

0
var string = "Hi how are you <b>today</b>", 
    newstring = "are today", 
    words= newstring.split(' '); 
$.each(words, function(i, v) { 
    if(new RegExp(v, 'ig').test(string) && !new RegExp('<b>'+v+'</b>', 'ig').test(string)) { 
     string = string.replace(v,''); 
    } 
}); 
console.log(string); 
0
var source = "Hi how are you <b>today</b>", 
    pattern = "are today", 
    res = []; 

pattern.split(/\s+/).forEach(function(word) { 
    source.split(/\s+/).forEach(function(sWord) { 
     if(~sWord.indexOf(word)) res.push(sWord); 
    }); 
}); 

console.log(res.join(' ')); 
+0

使用'〜'+1,但這將匹配的東西雖然不是這個詞,像'你好嗎?你今天,你不餓嗎?'。即使它不是其中一個單詞,也不會匹配。當然,在同樣的情況下,我會吐出2個'are's:/ – Chad 2012-04-16 17:30:20

+0

使用'〜'有什麼好處?我很好奇。 – 2012-04-16 18:53:38

0
var str = 'Hi how are you <b>today</b>', 
    words = ['are', 'today']; //or 'are today'.split(' '), 
    regex = new RegExp('(<[a-zA-Z]*>)?(' + words.join('|') + ')(</[a-zA-Z]*>)?', 'g'); 

console.log(regex, str.match(regex), str.match(regex).join(' ')); 

您將需要一個更復雜正則表達式來捕獲所有的HTML標籤。

http://jsfiddle.net/g7xQx/