Javascript:仅当'x'是文本的第一个单词时才替换'x',而不是其他地方

时间:2017-01-20 01:49:40

标签: javascript arrays string replace

我正在研究一个简单的JS代码,用一个数组替换文本中的其他单词。

<textarea id="text1">
e mi e
ke fo
e di
</textarea>
<button  type="button" onclick="myFunction()">try</button>
<pre id="demo"></pre>

<script>
function myFunction() {
   var str = document.getElementById("text1").value; 
    var mapObj = {
        "k":"g",
        " e": "B",
        "e":"ar"
    };

    var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
    str = str.toLowerCase().replace(re, function(matched){
    return mapObj[matched];
    });
    document.getElementById("demo").innerHTML = str;
}
</script>

结果是:

ar mi B
gar fo
ar di

但我希望有这个:

B mi B
gar fo
B di

如果要在"e"之前更改" e"(以e分隔,前面有空格),那么" e"将不会是" e"但是“ar”,所以在数组中,我将" e"放在"e"之上并且效果很好。

但问题是文本可能包含一个单独的"e"作为整个文本的第一个单词,或者作为一行中没有空格的第一个单词。在这种情况下,如何将此"e"替换为"B",并防止其被"ar"替换。

3 个答案:

答案 0 :(得分:1)

尝试以下代码。

function myFunction() {
   var str = document.getElementById("text1").value; 
    str = str.toLowerCase().split('k').join('g').split(' e').join(' B').split('\\n').join(' B').split('e').join('ar');
    document.getElementById("demo").innerHTML = str;
}

它是一种不同的方法,但我得到了预期的输出。

答案 1 :(得分:1)

一个简单的解决方法。

<script type="text/javascript">
var myfunction = function(){

  var f = document.getElementById('text1').innerHTML;
  var c = f.replace(/e/ig,'ar').replace(/\bar/ig,'B').replace(/k/ig,'g');
  document.getElementById('text1').innerHTML = c;

}
</script>

答案 2 :(得分:1)

这很有效。

<textarea id="source" cols="5" rows="5">
e mi e
ke fo
e di
</textarea>

<button  type="button" onclick="convert()">Convert</button>

<textarea id="destination" cols="5" rows="5">
</textarea>

<script>
function replaceWord(searchFor, replaceWith, paragraph) {
    if (paragraph) {
        var lines = paragraph.split('\n');
        for (lineNo = 0; lineNo < lines.length; lineNo++) {
            var words = lines[lineNo].split(' ');
            for (wordNo = 0; wordNo < words.length; wordNo++) {
                if (words[wordNo] === searchFor) {
                    words[wordNo] = replaceWith;
                }
            }
            lines[lineNo] = words.join(' ');
        }

        paragraph = lines.join('\n');
    }

    return paragraph;
}

function replaceWords(wordMap, paragraph) {
    for(var searchFor in wordMap)
    {
        if(wordMap.hasOwnProperty(searchFor))
        {
            paragraph = replaceWord(searchFor, wordMap[searchFor], paragraph);
        }
    }
    return paragraph;
}

function convert() {

    var mapObj = {
        "ke":"gar",
        "e": "B"
    };

    var source = document.getElementById("source");
    var destination = document.getElementById("destination");

    destination.value = replaceWords(mapObj, source.value);
}
</script>

这是jsFiddle。 https://jsfiddle.net/1egs7zgc/

对于它的价值,你的mapObj实际上并不是一个对象。