jQuery用每种方法替换匹配单词

时间:2015-01-20 15:14:46

标签: javascript jquery regex

如何用每种方法替换文本?

是不是?它没有正确替换/找到文本

$(function(){

   var style_find = ['tab-1','tab-2','rounded-1','rounded-2','tabs-1','tabs-2','tabs-alt-1','tabs-alt-2','tab-alt-1','tab-alt-2'];
   var cur_style = $('#obj').attr('class');
   var new_style;

   $(style_find).each(function(i,cl){
      new_style = cur_style.replace(cl,'new-class'); 
      // it doesnt replace the whole word
   });

})

1 个答案:

答案 0 :(得分:1)

String.prototype.replace()的行为会有所不同,具体取决于它的第一个参数的类型。请考虑以下代码:

var example = "str str str str"; 
example = example.replace("str", "bob"); 
console.log(example === "bob str str str"); // === true?

我为replace()提供了第一个参数的字符串。执行此操作时,它仅替换第一次出现的子字符串。

当您使用RegExp调用replace()时,您将获得返回所有匹配项的内容

var example = "str str str str"; 
example = example.replace(/str/g, "bob"); 
console.log(example === "bob bob bob bob"); // === true

我们需要的是一个匹配您想要替换的所有内容的正则表达式。

var style_find = ['tab-1','tab-2','rounded-1','rounded-2','tabs-1','tabs-2','tabs-alt-1','tabs-alt-2','tab-alt-1','tab-alt-2'];
var regexp = (function() { 
  var inner = ""; 
  style_find.forEach(function(el) { 
    inner = inner + el + "|";   
  }); 
  return new RegExp(inner, "g"); 
}());

使用regexp我可以将您的代码修改为:

$(function(){
   var style_find = ['tab-1','tab-2','rounded-1','rounded-2','tabs-1','tabs-2','tabs-alt-1','tabs-alt-2','tab-alt-1','tab-alt-2'];
   var cur_style = $('#obj').attr('class');
   var new_style = cur_style.replace(regexp, 'new-class'); 
});