0

我有一个简单的问题要问你(对你来说,我个人花了几个小时来解决这个问题)。我在 Javascript/Jquery 中创建了一个 Web 应用程序来验证 CSS 样式表。

我需要使用正则表达式从选择器中提取多个 CSS 类名。我做了类似的事情:

var selector = this.value;
var userNewClass = selector.match(/[.]([A-Za-z_-]*)/);
alert(userNewClass.toString());

它几乎可以工作了,但我的代码有两个问题(你这里有一个正则表达式菜鸟)。如果我写类似:

.test:hover

它还给我

.test, test 

相同的类名,但带点,另一个不带点。如果我编写一个具有多个类名的选择器:

.test, .hello

我得到了相同的结果......无论如何修改我的正则表达式(或我的代码?)以获得所有带有点(。)的类名称,考虑到用户可以在同一个类中拥有无限数量的类选择器?

4

2 回答 2

2

.test是完整匹配,test是捕获的组(括号中的任何内容())。您还需要g在关闭后的末尾添加 a/以匹配每个实例,而不仅仅是第一个。

也就是说,您可能不需要正则表达式,并且split在字符串上使用可能会更好。

'.test, .hello'.split(', ') // returns an array ['.test', '.hello']

如果你绝对必须使用正则表达式,试试这个:

/\.(\w+)/g

\w+这将匹配(并捕获)紧随文字的一个或多个字母和/或数字的任何和所有序列.

于 2013-01-05T19:42:58.483 回答
0

您将不得不使用 RegExp.exec 方法:

var input = ".test1.test2 .test3, .test4";

var re = /\.[\w\-]+/ig, match, matches = [];

while (match = re.exec(input)) {
  matches.push(match[0]);
}

alert(matches);

使用 split 将不起作用,因为您将不得不解析出伪类和所有其他可能的 CSS 语法元素。

于 2013-01-05T19:55:20.743 回答