2013-01-21 26 views
0

我有一个字符串列表,从许多cssRule指定规则的selectorText采取琴弦具有一般形式(关于正则表达式不知道):基于特定条件从字符串中提取子字符串的有效方法?

".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.”不存在作为一件都没有。 BUT.point.lackofclearance .stand_b, .point.lackofclearance .stand_c”我想提取“lackofclearance”,当然是第一次和第二次出现。

我在我的脑袋已经是一个理念,那就是:

  • 检查字符串“point”的存在
  • 如果是,“,
  • 对于每个结果分割字符串串,由 ''(空格字符)
  • 对于每个得到的子串,含有分裂 “.point”。,由 '.'(点炭)拆分
  • 带上一个分裂的第二子

是否有身体有另一种意见认为,这样做的一个别致的方式,可能会更短,或更有效,或两者... 它已经在做JavaScript中,在Chrome中,jQuery可用。

回答

1

正则表达式很棒。您只需查找文字".point."后跟单词"\w+"即可。用parens捕获该词(\w+)。然后在一个字符串上调用match,传递正则表达式并获得返回结果的第二项,这是捕获的子组词,就是你想要的。

var whatWeFound = ".point.omgyesawesome .foo".match(/\.point\.(\w+)/)[1]; 
console.log(whatWeFound); //=> "omgyesawesome" 
+0

很抱歉,您提供的正则表达式,只返回第一次出现,所以如果我有“.point.lackofclearance .stand_b,.point.lackofclearanceCritical .stand_c”,我只能提取lackofclearance,但我也想lackofclearanceCritical 。然后我尝试了这个/\.point\.(\S+)/g RegEx,我得到的结果是[“.point.lackofclearance”,“.point.lackofclearanceCritical”],并不是我想要的,但是我可以应用各自的RegEx,并采取我想要的 – StaticBug

1

您可以轻松使用regular expressions进行此类任务。

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 
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'] 
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被只与类名进行.point填充。

0

根据上面给出的答案,我调整了RegEx以适合我的需求,而这个似乎是做这项工作的。

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

当应用

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

我得到以下结果。

[".point.vacancy_unknown.direction_open ", "vacancy_unknown.direction_open "] 
相关问题