正则表达式拆分 - 一次工作

时间:2015-03-23 19:41:10

标签: javascript jquery html regex

我有以下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”]

似乎正则表达式只为第一个实例创建拆分。我检查了我的页面源代码,并验证了这些是页面上唯一的三个类。

为什么只能工作一次?

3 个答案:

答案 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;