2

我目前正在用纯 JS(无 jQuery)编写一个实用程序,它对给定的输入文本执行字符串替换:它查找字符串的出现并用另一个替换它们。为此,我希望允许用户在 <input> 元素中指定所需的替换字符串。

但是,如果用户输入特殊字符,例如换行符 (\n) 或制表位 (\t),这些将不会被解释为实际的换行符或制表位,而是作为文字字符串“\n”和“\吨”。

简而言之,这是我的代码以澄清问题:

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript">
        function run() {
            var inputStr = document.getElementById("inputStr").value;
            var searchStr = document.getElementById("searchStr").value;
            var regExp = new RegExp(searchStr, "g");
            var replacementStr = document.getElementById("replacementStr").value;
            alert(inputStr.replace(regExp, replacementStr));
        }
    </script>
</head>
<body>
    <label>Input string:</label> 
    <input id="inputStr" type="text" value="Apples and pears"><br>

    <label>Look for this:</label>
    <input id="searchStr" type="text" value=" and "><br>

    <label>Replace with this:</label>
    <input id="replacementStr" type="text" value="\n"><br>

    <button onclick="run()">Go!</button>
</body>
</html>

预期输出:

Apples
pears

实际输出:

Apples\npears

转义(例如“\\n”)或将输入提供给字符串对象(replacementStr = new String(replacementStr))都不会做任何事情。

一些帮助将不胜感激!

4

3 回答 3

2

普通输入字段不允许换行,并且不会以任何方式评估它们的值,这意味着如果用户输入\n,则不会将其转换为换行。

您可以手动替换所需的转义码:

replacementStr = replacementStr.replace(/\\n/g, '\n')
于 2018-01-13T22:25:59.203 回答
1

我在想,由于您的警报框显示\n,那么实际的字符串包含\\n,因此该框没有其他方式将显示\n

也许尝试在警报之前将字符串中的所有\\n替换为\n ?也许这会解决你的问题。

如果这不起作用,请尝试在 html 中显示输出,看看是否有任何改变。也许您使用的浏览器不支持警报框中的特殊字符。

于 2018-01-13T22:25:33.987 回答
0

对于 JavaScript...

%0D是编码的 CR

%0A是编码的LF

%0D%0A两者在一起。

于 2018-01-13T22:29:40.827 回答