簡體   English   中英

根據特定條件從字符串中提取子字符串的有效方法?

[英]Efficient way to extract a substring from string based on specific criteria?

我有一個字符串列表,取自許多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 ”沒有要提取的子字符串,從“ .point .path_a,.point .path,.point .stand ”也沒有要提取的內容,因為“ .point. ”不作為一個整體存在完全沒有 但是 ,“ .point.lackofclearance .stand_b, .point.lackofclearance .stand_c ”是.point.lackofclearance .stand_b, .point.lackofclearance .stand_c我想提取“ lackofclearance ”(第一次和第二次出現)。

我已經有了一個主意,那就是:

  • 檢查字符串“ point ”是否存在
  • 如果是,則將字符串除以' , '
  • 對於每個結果子字符串,用“ '(空格字符)
  • 對於每個包含“ .point 。”的結果子字符串, .point用'分隔. '(點字符)
  • 取最后一個分割的第二個子字符串

是否有任何其他機構提出其他建議(一種別致的建議),或者更短或更有效,或者兩者兼而有之?...必須在JavaScript中完成,在Chrome中,可以使用jQuery。

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']

您可以輕松地將正則表達式用於此類任務。

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

正則表達式很棒。 您只需尋找文字".point." 后跟一個單詞"\\w+" 用parens (\\w+)捕獲該單詞。 然后在字符串上調用match ,傳入正則表達式,然后返回返回結果的第二項,即捕獲的子組詞,即您想要的東西。

var whatWeFound = ".point.omgyesawesome .foo".match(/\.point\.(\w+)/)[1];
console.log(whatWeFound); //=> "omgyesawesome"
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

根據上面給出的答案,我對RegEx進行了調整以滿足自己的需求,而這個似乎很有效。

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

應用時

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

我得到以下結果。

[".point.vacancy_unknown.direction_open ", "vacancy_unknown.direction_open "]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM