正则表达式替换超出我想要的

时间:2014-11-27 09:58:07

标签: javascript jquery regex

我想从body元素中删除一个以demo-XXX开头的类,其中xxx可以是任何字符且没有固定长度。

所以我可以在身体中有这样的东西

<body classs="bye demo-hello water">

我正在使用这个正则表达式/\b\s?demo-.*\b/g

$("body")[0].className = $("body")[0].className.replace(/\b\s?demo-.*\b/g, '');

但它正在移除demo-XXX之后的所有类,例如water

<body classs="bye">

3 个答案:

答案 0 :(得分:2)

你可以按照@nhahtdh

的说法这样做
$('body').attr('class', function(_, cls){
   return cls.split(/\s+/).filter(function(x){  // split
       return x.indexOf("demo-") !== 0; // filter out unwanted values
   }).join(" "); // join the array and return it
});

如果你想要正则表达式解决方案,你可以做

$('body').attr('class', function(_, cls){
   return cls.replace(/\bdemo-\S+/g,"");
});

答案 1 :(得分:1)

您需要使用^\s排除空格并查找1个或多个字符,因此请使用+代替*

$("body")[0].className =$("body")[0].className.replace(/\b\s?demo-[^\s]+\b/g,'');

<强> DEMO

答案 2 :(得分:0)

\b\s?demo-[a-zA-Z0-9]+\b

使用此功能。.会在检测到\b之前消耗所有内容。