0

テキストのスニペットから 3 つのフィールドを抽出する必要があります。これらのフィールドのうち、ファイルと拡張子の 2 つを抽出する正規表現があります。コンテンツ テキストを抽出する方法がわかりません。また、「パターンではない」以外のすべての文字を一致させる戦略もありません。

パターンは次のとおりです。var regex_file = /<!--<\|(.*)\.(.*)\|>-->/g,

また、正規表現がこれを行うための最良の方法であるかどうかもわかりません。文字列メソッドの分割を検討しました:split(regex_file)

しかし、区切り文字を分割したままにする方法はないと思います。区切り文字の間のコンテンツを返すだけです。split()また、以下のようにループする方法はないと思いexec()ます。

以下の構造のテキストからこれら 3 つのフィールドを抽出する最良の方法は何ですか? さらに以下は、私がこれまでに持っているものです。

テキスト構造

<!--<|file.extension|>-->

// 1-10k of content text

<!--<|file.extension|>-->

// 1-10k of content text

<!--<|file.extension|>-->

// 1-10k of content text

最初の試み

    /*addNodes
    **
    **
    **
    */
    function addNodes(text) {
        var regex_file = /<!--<\|(.*)\.(.*)\|>-->/g,
            arr_file;

        while ((arr_file = regex_file.exec(text)) !== null) {
            arr_file[1] // holds file 
            arr_file[2] // holds extension
            arr_file[3] // need content here
        }
    }

追加基準:

IE10+、FF10+、Safari5+、Chrome20+...主要な最新ブラウザ。

4

2 に答える 2

1

yes there is a way to loop through split().

use java u can do it like that:

public static void main(String[] args) {
    String text = "<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text";
    String reg = "(?=\\n<!--<\\|[^<]*\\.[^>]*\\|>-->)";
    String[] split = text.split(reg);
    System.out.println(Arrays.toString(split));
}

output

[<!--<|file.extension|>--> 
 1-10k of content text , 
<!--<|file.extension|>--> 
 1-10k of content text , 
<!--<|file.extension|>--> 
 1-10k of content text]

java script:

<html>
<body>
    <button onclick="myFunction()">Try it</button>
    <script>

    function myFunction(){
        var reg = /(?=\n<!--<\|[^<]*\.[^>]*\|>-->)/;
        var text = "<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text \n<!--<|file.extension|>--> \n 1-10k of content text";
        var n= text.split(reg);
        alert(n);
    }
    </script>
</body>
</html>
于 2012-12-31T02:41:29.503 に答える
1

あなたはかなり近かった。区切り文字は正規表現で保持できます。

s = "<!--<|file.extension|>--> // 1-10k of content text <!--<|file.extension|>--> // 1-10k of content text <!--<|file.extension|>--> // 1-10k of content text"
a = s.split(/<!--<\|([^.]*)(\.[^|]*)\|>-->/g)
for (i = 1; i < a.length; i += 3) {
  console.log('result:');
  console.log('  "'+a[i]  +'"');
  console.log('  "'+a[i+1]+'"');
  console.log('  "'+a[i+2]+'"');
}

出力:

result:
  "file"
  ".extension"
  " // 1-10k of content text "
result:
  "file"
  ".extension"
  " // 1-10k of content text "
result:
  "file"
  ".extension"
  " // 1-10k of content text"

Windows では ie9、chrome23、osx10 では chrome23、safari6、ff6 で手動でテストできました。

browsershots.org にも投げたところ、これらのバージョンで実行に成功しました。

Firefox: 3.6.27 4.0.1 5.0.1 1.5.0.12 10.0.2 6.0.1 11.0 11.0 12.0 13.0 14.0.1 17.0 7.0.1 15.0 16.0 2.0.0.20 8.0.1 9.0.1 18.0 17.0 8.0.19. .1 10.0.2 17.0 6.0.2 7.0.1 8.0 12.0 14.0.1 13.0.1 4.0.1 15.0 5.0.1 3.0.10 19.0 18.0

msie: 10.0

サファリ: 3.2.3 5.1.7 5.1.7 6.0 5.0

chrome: 7.0.517.44 23.0.1271.101 17.0.963.56 8.0.552.224 17.0.963.56 22.0.1229.26 23.0.1251.2 22.0.1312.45 9.0.597.107 11.0.696.77 10.0.612.1 12.0.742.112 13.0.782.218 14.0.835.202 15.0.874.106 18.0.1025.33 19.0.1041.0 20.0.1132.57 21.0.1180.89 24.0.1312.45 23.0.1271.97 16.0.912.77 2.0.172.31 6.0.472.63

次の場合は成功しませんでした: ubuntu-12.04-lts の chrome 20.0.1132.47

または msie < 10 のバージョン

于 2012-12-31T03:15:05.707 に答える