Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用javascript解析BEM类选择器的正则表达式_Javascript_Regex - Fatal编程技术网

用javascript解析BEM类选择器的正则表达式

用javascript解析BEM类选择器的正则表达式,javascript,regex,Javascript,Regex,我的问题是: 我想把一个字符串拆分成一个对象数组。 我的字符串是一个BEM类选择器,如下所示: 其中我的字符串(不带点)将通过匹配“\uuuuu”和“---”进行拆分 foo-bar--baz_uuu-foo--bar=['foo-bar'、'-baz'、'uuuu-foo'、'-bar'] foo-bar--baz=['foo-bar','--baz'] foo-bar\uuuuu-bar--baz=['foo-bar','uuuuuu-bar','--baz'] foo=['foo'] 我尝

我的问题是:

我想把一个字符串拆分成一个对象数组。 我的字符串是一个BEM类选择器,如下所示:

其中我的字符串(不带点)将通过匹配“\uuuuu”和“---”进行拆分

foo-bar--baz_uuu-foo--bar
=
['foo-bar'、'-baz'、'uuuu-foo'、'-bar']

foo-bar--baz
=
['foo-bar','--baz']

foo-bar\uuuuu-bar--baz
=
['foo-bar','uuuuuu-bar','--baz']

foo
=
['foo']

我尝试使用以下正则表达式:

const regex = /([a-zA-Z0-9']+)(--[a-zA-Z0-9']+)(__[a-zA-Z0-9']+)/g;

while (match = reg.exec(string)) {
    var group1 = match[1];
    var group2 = match[2];
    var group3 = match[3];

    console.log(group1+'; '+group2+'; '+group3);
}
但是
foo-bar--baz__;u-foo-bar
仅输出:

foo-bar --baz __foo
而不是最后一条

我不明白为什么

另外,也许有更好的整体解决方案来解决我的问题


感谢您的帮助

我对边界元法一无所知,但将字符串拆分为对象很容易。我不知道它是否有效。它无法处理字符串中的更多项

var a=“foo-bar--baz\uu-foo--bar”
变量名称=[“块”、“修改器”、“元素”、“修改器”];
var arr=a.split(/--| uu/g).map(函数(el,i){
var obj={};
obj[name[i]]=el;
返回obj;
});
控制台日志(arr)试试这个:
([a-zA-Z0-9^]+[-]?[a-zA-Z0-9^]+)(?:-||)([a-zA-Z0-9^]+[-]?[a-zA-Z0-9^]+)


要解析BEM类选择器,您可以使用,但
foo-bar--baz_uu-foo--bar
似乎不是BEM选择器;)

你确定
foo-bar--baz_u_-foo--bar
是一个“有效”的BEM标识符吗?@evolutionxbox是的,这是一个在各种BEM风格中都有效的BEM类。@zzzzBov这很奇怪。该选择器似乎是BMBEM。@evolutionxbox它只是一个示例,但我不推荐使用it@evolutionxbox“边界元法”的名称并不是为了规定部件的顺序或数量。否则,大多数类将只是
B
BM
be
。是的,至少不是一个好的类,但这只是一个示例;)。BEM有很多种风格。BEM-naming的设计目的是支持不同的风格,但它仍然无法帮助使用这种特定的命名方案:)Arrrrg,我不太在乎这不是我的观点……它可能是错误的,也可能不是,我只想拆分它……我误读了你的评论,我以为你在争论选择器的有效性。:)谢谢,但这只适用于示例选择器,如果我在最后一个位置有一个元素,您的代码仍将使用“修饰符”键。@Gaelboyendal您可能需要对“多种口味”命名更加严格。这看起来不是更好吗<代码>([a-z0-9]+({1})?[a-z0-9]+)|(-| |)