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.はありません。" " は 1 つのピースとしてまったく存在しないからです。しかし、 " "については、もちろん最初と 2 番目の.point.lackofclearance .stand_b, .point.lackofclearance .stand_c" " を抽出したいと思います。lackofclearance

私はすでに頭の中にアイデアを持っています。それは次のとおりです。

  • 文字列 " point" が存在するかどうかを確認します
  • ,はいの場合、文字列を ' 'で分割します
  • 結果の各部分文字列を ' ' (スペース文字)で分割
  • " ." を含む結果の各部分文字列を' ' (ドット文字).pointで分割.
  • 最後の分割の 2 番目の部分文字列を取る

別の提案、シックな方法、より短い、またはより効率的な、またはその両方がある人はいますか... 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

正規表現は素晴らしいです。".point."リテラルの後に単語が続くものを探すだけです"\w+"。その単語を括弧でキャプチャし(\w+)ます。次に、文字列を呼び出しmatch、正規表現を渡し、返された結果の 2 番目の項目を取得します。これは、キャプチャされたサブグループの単語であり、必要なものです。

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、次のクラス名のみが入力されます.point

于 2013-01-21T18:48:33.233 に答える
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 に答える
0

上記の回答に基づいて、自分のニーズに合わせて正規表現を調整しましたが、これでうまくいくようです。

/\.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 に答える