0

関数の結果に置き換えようとしているプレースホルダーを使用する文字列があります。

sometext = "%number% text text %number%"replace(/%\w+%/g, function(parm) {
       return 'customtext';
}

知りたいのは、一致数を取得する方法はありますか? 現在実行中の関数が最後の要素を置換しているかどうかを確認できるように、その番号が必要です。そうであれば、別のものを返します。関数の本体でこのようなもの

if(lastElement) {
   return 'something else';
}

sometext = "%number% text text %number%"replace(/%\w+%/g, function(parm) {
       return 'customtext';
4

4 に答える 4

1

関数で一致の数を直接取得することはできません。提供されていません。

私は単にそれを前に数え、置換中の関数呼び出しを数えます:

var i = 0, n = str.split(/%\w+%/).length-1;
var sometext = str.replace(/%\w+%/g, function() {
   if (++i==n) return 'last text';
   else return 'not last text';
});
于 2013-04-06T17:57:59.167 に答える
0

まず、一致の数を見つけます。

var matchCount = haystack.match(needle);

次に、置換ごとに残りの一致数をカウントダウンします。

haystack.replace(needle, function(param) {
    matchCount--;
    if( matchCount == 0 ) {
        return 'Last Element';
    }
    return 'Not Last Element';
});

結合されたコードは次のようになります。

var haystack = "%number% text text %number%";
var needle = new RegExp("%\w+%", "g");

var matchCount = haystack.match(needle);
haystack.replace(needle, function(param) {
    matchCount--;
    if( matchCount == 0 ) {
        return 'Last Element';
    }
    return 'Not Last Element';
});

また、次のような関数に短縮できます。

function customReplace(haystack, needle) {
    var count = haystack.match(needle);
    haystack.replace(needle, function() {
        return (--count ? 'notLast' : 'isLast');
    });
}
于 2013-04-06T18:20:57.690 に答える
0

これにより、一致数が得られます。

var last = "%number% text text %number%".match(/%\w+%/g).length;

次に、使用しているコールバックに「if」を入れて、上記で収集した長さと比較して、コールバックが実行された回数のカウンターを追跡します。

乾杯。

于 2013-04-06T17:56:22.227 に答える
0

JavaScript の .match() 関数を使いたいと思います。正規表現を指定すると、一致の配列が返されます。その後、配列の長さを取得できます。

見る:

http://www.w3schools.com/jsref/jsref_match.asp

于 2013-04-06T17:54:55.907 に答える