Из текста «myWord Word» я хочу получить «myWord Replaced», используя replace с функцией и аргументом соответствия. Итак, я написал следующий код, но получаю «myReplaced Word» вместо «myWord Replaced». Не могли бы вы помочь мне, так как я плохо понимаю механизм аргумента совпадения. Спасибо вам всем.

<div id="myView"></div>

<script>
    vText = "myWord Word";
    vWord = "Word";

    vText = vText.replace('Word', function(match) {
        if (match == vWord) {
           return 'Replaced';
        } else {
            return match;
        }
    })

    document.getElementById("myView").innerHTML = vText;
</script>
0
Apostolos 16 Фев 2021 в 15:34

3 ответа

Лучший ответ

Вы можете использовать регулярное выражение для проверки совпадения всего слова и замены слова на желаемое слово «Заменено».

<div id="myView"></div>

<script>
    vText = "myWord Word";
    vWord = "Word";
    var regex = new RegExp('\\b' + vWord + '\\b', "g");
    var vText = ("myWord Word").replace(regex,"Replaced");

    document.getElementById("myView").innerHTML = vText;

</script>
2
Anita 16 Фев 2021 в 12:44

Вы можете использовать переменную счетчика для подсчета ваших совпадений, а затем заменить определенное слово заданным совпадением следующим образом:

<div id="myView"></div>

<script>
    let vText = "myWord Word";
    let vWord = "Word";
    let count = 0;

    vText = vText.replace(/Word/g, function(match) {
        count++;
        if (match == vWord && count == 2) {
           return 'Replaced';
        } else {
            return match;
        }
    })

    document.getElementById("myView").innerHTML = vText;
</script>
1
Ph0enixKM 16 Фев 2021 в 12:46

На основе ответа https://stackoverflow.com/users/3321784/anita и https://stackoverflow.com/users/669576/johnny-mopp , он отлично работает, когда исходный код становится:

<div id="myView"></div>

<script>
    vText = "myWord Word"; 
    vWord = "Word";
    var regex = new RegExp('\\b' + vWord + '\\b', "g");

    vText = vText.replace(regex, function(match) {
        if (match == vWord) {
           return 'Replaced';
        } else {
            return match;
        }
    })

    document.getElementById("myView").innerHTML = vText;
</script>
0
Apostolos 16 Фев 2021 в 13:15
66224403