2012-04-16 35 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/