-1

このようなウェブページで

 <div>text text</div> |text text 55.555555 |44.444444 | <div>text <b>name</b></div>

このような配列を取得する必要があります

{ [55.555555 , 44.444444, "name"] , [ ... , ... , ... ], ... } 

-座標を見つける部分を実現するために正規表現を使用したいのですが、この部分の書き方がわかりません。

return all text parts which match this expression

いくつかのアイデア/機能を手伝ってもらえますか?

アップデート

ここでnativeTreeWalker関数がすべてのテキストノード/SO を取得することがわかり、この関数を変更して2つの数値と1つのテキストを検索しました。これはほとんど機能しますが、まだバグがあり、小数点なしで1234..のような偶数を返します。

function nativeTreeWalker() {
    var walker = document.createTreeWalker(
        document.body, 
        NodeFilter.SHOW_TEXT, 
        null, 
        false
    );

    var node;
    var textNodes = [];
    var name = false;
    var elem = null;

    while(node = walker.nextNode()) {

        if (name){ elem.push(node.nodeValue); textNodes.push(elem); console.log(elem); name = false; }
        else { elem = null; }

        elem = node.nodeValue.match(/\d{2}.\d+/g);
        if (elem!=null){ name=true; } 

    }
}

nativeTreeWalker()
4

3 に答える 3

1

さて、これが私の解決策です..

function nativeTreeWalker() {
    var walker = document.createTreeWalker(
        document.body, 
        NodeFilter.SHOW_TEXT, 
        null, 
        false
    );

    var node;
    var textNodes = [];
    var name = false;
    var elem = null;

    while(node = walker.nextNode()) {

        if (name){ elem.push(node.nodeValue); textNodes.push(elem); console.log(elem); name = false; }
        else { elem = null; }

        elem = node.nodeValue.match(/\d{2}.\d+/g);
        if (elem!=null){ name=true; } 

    }
}

nativeTreeWalker()
于 2013-03-11T09:41:02.430 に答える
0

データの入力形式を変更できないことが確実な場合は、この正規表現がニーズに合うはずです。

[|].*?([+-]?\d+[.]\d+).*?[|].*?([+-]?\d+[.]\d+).*?[|].*?<b>(.*?)</b>

最初のグループ($1)には、最初の座標、2番目のグループ() $2、2番目の座標、および3番目のグループ()$3の名前が含まれています。

これは、JavaScriptでどのように使用できるかを示すデモです。

于 2013-02-25T11:03:57.093 に答える
0

更新では、関数が10進数以外の数値を返す理由は、をエスケープしていない.ため、改行以外の任意の文字に一致するワイルドカードメタ文字として解釈されています。小数のみを照合するために、

elem = node.nodeValue.match(/\d{2}.\d+/g);

である必要があります/\d{2}\.\d+/g

を使用するのTreeWalkerは良い考えのように思われるので、それを使用して質問で要求する形式の配列を作成する場合、つまり、座標とそれに関連付けられた名前の個別の配列を使用する場合は、最終的なコードを回答として投稿してください。

于 2013-02-25T11:24:58.947 に答える