Javascript&正则表达式,倍数匹配

时间:2013-01-05 19:38:20

标签: javascript jquery css regex

我有一个简短的问题(对你而言,我个人花了好几个小时)。我在Javascript / Jquery中创建了一个Web应用程序来验证CSS样式表。

我需要从Regex的选择器中提取多个CSS类名。我做过类似的事情:

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

它几乎正常工作,但我有两个代码问题(你有一个正则表达式noob)。 如果我写下这样的话:

.test:hover

它让我回头

.test, test 

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

.test, .hello

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

2 个答案:

答案 0 :(得分:2)

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

也就是说,您可能不需要正则表达式,并且可以使用字符串上的split来提供更好的服务。

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

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

/\.(\w+)/g

这将匹配(并捕获)一个或多个字母和/或数字\w+的所有序列,这些字母和/或数字.遵循文字{{1}}

答案 1 :(得分: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语法元素。