使用javascript问题

时间:2011-11-29 13:28:41

标签: javascript html

我正在使用javascript,我创建了一个jsfiddle

我有两个文本字段:一个包含用户输入,另一个包含结果。我的问题是,当我输入两次相同的单词时,只有其中一个被替换。

例如,如果我在第一个文本字段中输入"going,going",则结果为"GNG,going" - 而不是"GNG,GNG"。我的代码中我做错了什么?

HTML:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Scrolling DIV demo on iPhone / iPod Touch / Android / iPad</title>
</head>
<body>
    <input type="text" id="first_text" value="going, used to, to do fast, as soon as possible"/>
    <input type="text" id="second_text"/>
    <input type="button" onclick="replaceText()" value="Click!"/>
</body>
</html>

使用Javascript:

var replaceText = function () {
    var inputval = document.getElementById('first_text').value;
    var arr = {
        "going": "GNG",
        "used to": "UD",
        "as soon as possible": "ASAP",
        "to do fast": "tdf"
    }

    for(var key in arr) {
        if (typeof (arr[key]) !== "undefined") inputval = inputval.replace(key, arr[key])
    }
    document.getElementById("second_text").value = inputval;
}

4 个答案:

答案 0 :(得分:5)

使用inputval.replace(RegExp(key,"g"), arr[key]) 换句话说,从您key值创建正则表达式,将'g [lobal]'modifier添加到其中。

答案 1 :(得分:3)

变化:

inputval = inputval.replace(key, arr[key])

要:

inputval = inputval.replace(new RegExp(key, 'g'), arr[key])

默认情况下,replace函数和正则表达式不是全局的,而是g开关的作用。这里的工作示例:http://jsfiddle.net/NSy8P/1/

答案 2 :(得分:1)

那是因为替换只是对第一次出现的操作而不是你可以使用以下内容:

function replaceAll(txt, replace, with_this) {
  return txt.replace(new RegExp(replace, 'g'),with_this);
}

http://naspinski.net/post/Javascript-replaceAll-function.aspx

答案 3 :(得分:1)

替换仅替换模式的第一次出现。如果您想要更换更多,那么一旦您需要使用代码的正则表达式版本。 (注意“g”代表“全球替代”)

'going, going'.replace(/going/g, 'Go'); // 'Go, Go'

如果您仍想保留相同的代码(而不是将其重写为直接使用正则表达式模式),您可以从字符串中动态创建正则表达式。

var pattern = new RegExp('going', 'g');

但是你的模式中不能有regexp特殊字符。如果您希望能够在键中使用特殊字符(如括号或反斜杠),则需要一个转义函数,如下所示:

function regex_escape(str){
    return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1');
}

var pattern = new RegExp (regex_escape(key), 'g');