我有以下Jquery和Regex:
$("[class^=ipsum-img],[class^=ipsum-img-]").each(function(){
var x = $(this).attr("class");
console.log(x.length);
if (x.length>8) {
var m = x.split(/(\d+)[^-]*$/g);
console.log(m);
}
else{
console.log("short");
}
});
我正在寻找班级“.ipsum-img”和“.ipsum-img-xxxxxx”的所有实例。
对于每次出现,我都会得到班级的长度。
如果长度> 8,我可以假设它是“.ipsum-img-xxxxxx”
类如果是“ipsum-img-xxxxxx”,我需要使用正则表达式,并从类名解析出“xxxxxx”。
我正在使用以下正则表达式:
var m = x.split(/(\d+)[^-]*$/g);
console.log(m);
在我的控制台中,我看到以下内容:
数组[“ipsum-img-”,“000000”,“”]
数组[“ipsum-img-ffffff”]
数组[“ipsum-img-efefef”]
似乎正则表达式只为第一个实例创建拆分。我检查了我的页面源代码,并验证了这些是页面上唯一的三个类。
为什么只能工作一次?
答案 0 :(得分:2)
正则表达式查找一个或多个数字的字符串,后跟任意数量的字符,这些字符不是字符串末尾的-
。 "ipsum-img-ffffff"
和"ipsum-img-efefef"
都不匹配。
就个人而言,无论如何我都不会用.split()
来做这件事:
var matched = /ipsum-img-(\d+)$/.exec(this.className);
var number = matched && matched[1] || null;
答案 1 :(得分:1)
模式匹配十进制数字,但字符串中有十六进制数字。使用十进制数字和a设置为f:
var m = x.split(/([\da-f]+)[^-]*$/g);
答案 2 :(得分:0)
感谢您的帮助,我需要的模式是:
var matched = /ipsum-img-([\a-zA-Z0-9]+)$/.exec(this.className);
var number = matched && matched[1] || null;