0

我有一个字符串列表,取自许多 CSSRule 的 selectorText,字符串具有一般形式(不确定那个 RegEx):

".selector1 .elementClass[, ]*"

具体例子如下:

".point"
".point.lackofclearance .stand_b, .point.lackofclearance .stand_c"
".point .path_a,.point .path,.point .stand"
".blink_on .point.direction_open .stand"
".blink_off .point.a_in_ratc_selection .path_a, .blink_off .point
 .path.a_in_ratc_selection"

现在,在这些字符串中,有趣的是那些包含字符串“ point”的字符串,并且在那些包含字符串“ point”的字符串中,我对紧跟在“ .point.”之后和下一个空格字符之前的子字符串感兴趣。它们代表我想阅读的元素状态。

例如:

从 " .point" 没有要提取的子字符串,从 " .point .path_a,.point .path,.point .stand" 也没有要提取的子字符串,因为 " .point." 根本不作为一个片段存在。但是对于“ .point.lackofclearance .stand_b, .point.lackofclearance .stand_c”我想提取“ lackofclearance”,当然是第一次和第二次出现。

我脑子里已经有了一个想法,那就是:

  • 检查字符串“ point”是否存在
  • 如果是,则将字符串拆分为 ' ,'
  • 对于每个生成的子字符串,由 ' ' (空格字符)分割
  • 对于每个包含“.”的结果子字符串,用“ ”(点字符).point分割.
  • 取最后一个拆分的第二个子字符串

有没有人有其他建议,一种别致的方式,可能更短,或更高效,或两者兼而有之……必须在 JavaScript 中完成,在 Chrome 中,jQuery 可用。

4

5 回答 5

2
var str = ".point.lackofclearance .stand_b, .point.lackofclearance .stand_c";
var re = /\.point\.(\w+)/g;
var result = [];
var m;
while (m = re.exec(str)) {
  result.push(m[1]);
}
// result == ['lackofclearance', 'lackofclearance']
于 2013-01-21T18:27:33.743 回答
1

您可以轻松地将正则表达式用于此类任务。

var m = selectorText.match(/\.point.\w+/)
for (var i=0; m!=null && i<m.length; i++)
    console.log(m[i].substring(7)); // remove ".point." part
于 2013-01-21T18:20:49.840 回答
1

正则表达式很棒。您只需查找一个文字".point."后跟一个单词"\w+"。用 parens 捕捉那个词(\w+)。然后调用match一个字符串,传入正则表达式,得到返回结果的第二项,也就是捕获的子组词,就是你想要的东西。

var whatWeFound = ".point.omgyesawesome .foo".match(/\.point\.(\w+)/)[1];
console.log(whatWeFound); //=> "omgyesawesome"
于 2013-01-21T18:24:31.877 回答
1
var strings =  "YOUR_CLASS_STRINGS".split(" ");
var regex = /\.point\.(\S+)/;
var arr = [];

for(x in strings){
    if(regex_string = strings[x].match(regex)){ 
        arr.push(regex_string[1]);
    }
}

这应该导致arr仅使用类名填充 continue .point

于 2013-01-21T18:48:33.233 回答
0

根据上面给出的答案,我调整了 RegEx 以满足我的需要,这似乎可以完成这项工作。

/\.point\.(.+\s)/

应用时

".point.vacancy_unknown.direction_open .path_a".match(/\.point\.(.+\s)/)

我得到以下结果。

[".point.vacancy_unknown.direction_open ", "vacancy_unknown.direction_open "]
于 2013-01-22T13:07:05.173 回答