我有一个简短的问题(对你而言,我个人花了好几个小时)。我在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
我得到了相同的结果......无论如何都要修改我的正则表达式(或我的代码?)以获得所有带点(。)的类名,考虑到用户可以拥有无限数量的类在同一选择器?
答案 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语法元素。