1

重複の可能性:
javascriptで単語の最後の出現を置き換える方法は?

たとえば、「345 ,456,678, 345 , 345 ,678343,232」という文字列があります。

最後に発生した345を文字列から削除する必要があります(この例では真ん中にありますが、文字列のどこにでもある可能性があります)。RegEx の使用を考えましたが、適切なパターンが見つからず、どこにも解決策が見つかりませんでした。

誰でもこれを手伝うことができますか?

psこれにはJavaScript文字列操作を使用できることはわかっていますが、これがRegExの目的だと思います...

ありがとう...

4

2 に答える 2

3

あなたはこのようにすることができます...

var str = "345,456,678,345,345,678,343,232",
    last_idx = str.lastIndexOf(345);

str = str.replace(/345/g, function(s, i) { return i === last_idx ? '' : s; });

@Crayon Violentが指摘したようにRegExp、変数を統合する場合は、コンストラクターから正規表現を構築する必要があります。

function removeLast(str, v) {
    var re = new RegExp(v, 'g'),
        last_idx = str.lastIndexOf(v);

    return str.replace(re, function(s, i) { return i === last_idx ? '' : s; });
}

削除する値が文字列としての正規表現であり、それを に使用する必要がある場合は、代わりにlastIndexOfを使用できます.exec()

function removeLast(str, v) {
    var re = new RegExp(v, 'g'),
        match,
        last_idx;

    while (match = re.exec(str))
        last_idx = re.lastIndex - match.length

    return str.replace(re, function(s, i) { return i === last_idx ? '' : s; });
}

ただし、 を使用する場合.exec()は、常にループ内で新しい文字列を構築できます。ループが完了した後、最後の一致を確実に除外する必要があります。

于 2012-06-05T15:28:18.537 に答える
2

javascriptで最後に出現した単語を置き換える方法のトップの回答から変更されましたか? :

function removeLast(str, target) {
    return str.replace(new RegExp("(.*)"+target), "$1");
}

これは貪欲さを使用します.*-- ターゲットの最後のインスタンスに到達するまで、目的のターゲットのインスタンスを含め、できるだけ多くの文字列を取得しようとします。したがって、正規表現全体は、ラージットの最後のインスタンスまでの文字列全体と一致し、それを(.*)ターゲット文字列の前のすべてである一致したものに置き換えます。

于 2012-06-05T15:31:16.660 に答える