jQuery - 从特定模式开始删除所有元素类

qua*_*rky 0 regex tags jquery class removeall

我需要从'layout-'中删除元素开头的所有类

我尝试:

var regex = new RegExp('\b' + 'layout-' + '.*?\b', 'g');
$(el)[0].className = $(el)[0].className.replace(regex, '');
Run Code Online (Sandbox Code Playgroud)

但它不起作用.解决方案可以在jQuery中.任何的想法?

Har*_*rry 5

您在问题中发布的RegExp无法正常工作,因为\b它没有被转义为\\b.因此实际的RegExp正在变为/layout-.*?/g而不是/\blayout-.*?\b/g.执行以下更改将起作用.

var regex = new RegExp('\\b' + 'layout-' + '.+?\\b', 'g');
Run Code Online (Sandbox Code Playgroud)

您也可以尝试如下.这将删除所有类似的类layout-X

var regex = /(\s)*(layout-.*?)(?=\s)/g; 
$('#test')[0].className = $('#test')[0].className.replace(regex, '');
Run Code Online (Sandbox Code Playgroud)

演示小提琴

输入: class=sample layout-10 layout-9 sample1 slayout

输出: class=sample sample1 slayout

RegExp解释:

\s - 任何空白字符

(layout-.*?) - 捕获所有值,例如layout-X,其中X可以是任意次数的任何字符

(?=\s) - 向前看下一个空白字符(意思是直到结尾)


正如musefan在评论中指出的那样,var regex = /\blayout-.+?\b/g;也将完成这项工作.