0

AS3やJavaScriptで関数を作成しようとしています。この関数を使用すると、単語が角かっこで囲まれた文字列を取得し、残りを分割しながらそれらをまとめることができます。したがって、たとえば、次のような文が必要になります。

これは、[単語のグループ]が[角かっこ]で囲まれている文の[例]です。

そして、それを次のような配列に変換します。

[This,is,an example,of,a,sentence,that,has,groups of words,enclosed,in,square brackets.]

これを達成するための最も効率的な方法は何でしょうか?おそらく先読みや後読みで、ある種の正規表現を使用すると思います。何か案は?

4

5 に答える 5

0

ここで大声で考えているだけです...私の最初の試みは、一致する正規表現であり、次にブラケット(およびコンテンツ)を保存して、ある種の一意のシンボルに置き換えます。次に、文字列をスペースで分割し、配列内の記号を、削除されたのと同じ順序でブラケットの内容に置き換えます。

この時点での効率性はわかりませんが、どこかから始めなければなりません。これでうまくいくことを願っています。

于 2012-09-06T07:18:38.833 に答える
0

これはそれを行います:

function splitWithBracket(str) {
    var out = str.split(" "), i = 0, begin, end;

    function findNext(chr) {
        while (i < out.length) {
            if (out[i].indexOf(chr) != -1) {
                out[i] = out[i].replace(chr, "");
                return(i);
            }
            i++;
        }
        return(-1);
    }

    do {
        end = -1;
        begin = findNext("[");
        if (begin != -1) {
            end = findNext("]");
            if (end != -1) {
                var tmp = out.splice(begin, end - begin + 1);
                out.splice(begin, 0, tmp.join(" "));
                i = begin + 1;
            }
        }
    } while (end != -1);
    return(out);
}

作業デモ: http://jsfiddle.net/jfriend00/jLNXa/

または、正規表現の置換/マッチングを使用するバージョン:

function splitWithBracket(str) {
    str = str.replace(/\[([^\]]*)\]/g, function(m, p1) {
            return(p1.replace(/ /g, "!!xx!!"));
    });
    var out = str.split(" ");
    for (var i = 0; i < out.length; i++) {
        out[i] = out[i].replace(/!!xx!!/g, " ")
    }
    return(out);
}

実際のデモ: http://jsfiddle.net/jfriend00/Hbjzk/

于 2012-09-06T07:19:07.807 に答える
0

これを試してください:

var str = 'This is [an example] of a sentence that has [groups of words] enclosed in [square brackets.]';
var finder = /\[?([^\[\]]+)\]?/g;
var result;
while( ( result = finder.exec( str ) ) !== null ){
    console.log( result );
}

幸運を!

于 2012-09-06T07:24:00.497 に答える
0

http://jsfiddle.net/mwfHn/2/ : _

    <script>
    myStr = "This is [an example] of a sentence that has [groups of words] enclosed in [square brackets.]";
    myStr = myStr.replace(/\[[a-zA-Z. ]+\]/g, function(match){ return match.replace(/\s+/g,"#").replace(/\[|\]/g,""); }).split(" ").join(",").replace(/#/g," ");
    alert(myStr);
   </script>
于 2012-09-06T07:25:11.870 に答える