替换 javascript 中字符串中的字符

replacing characters in a string in javascript

我正在尝试将 "Sydney & Melbourne" 中的 & 替换为 &。 但是没用。

我尝试了以下几种不同的方法:

我确实知道 && 是相同的东西,所以结果可能是 &(实际上它发生在我在这里写的时候堆栈溢出)。但是有办法解决吗?

目前,要替换 &,您需要用单词字符包围 &(例如:a&b)。

这是一个 JSFiddle,直观地解释了我对您尝试使用的正则表达式的意思。

相反,直接定位 &

var string = 'Sydney & Melbourne';

string = string.replace(/&/g, '&');

console.log(string);

你的第一次尝试

with for loop and if statement:

for(var i=0; i<str.length; i++){
    if(str[i]==="&"){
      str[i]="&amp;";
    }
}

这当然不行。 JS字符串是immutable,也就是

Once a string is created, it is not possible to modify it

它不会导致 run-time 错误,但它不会执行任何操作。 (即使 JS 字符串不是不可变的,你也不能用多个字符替换一个字符。)

你的第二次尝试

with regex and replace:

var myRegExp = /\b&\b/;

str = str.replace(myRegExp,"&amp;");
return str;

这当然不行。 space 和&符号之间没有单词边界。见word boundary的定义:

A word boundary matches the position where a word character is not followed or preceded by another word-character.

其中 "word character" 等同于 [a-zA-Z0-9_].

但是为什么呢?

然而,真正的问题是你为什么要这样做。如果您只想将此字符串作为文本插入到 DOM 中,请使用 textContent:

document.getElementById("city").textContent = "Sydney & Melbourne";

(而不是使用 innerHTML)。在 jQuery 中,如果您碰巧使用它,请使用 text() 而不是 html()。这种方法的优点是不会被字符串中的其他 HTML 个字符混淆,特别是 <.

如果您的问题与 URL 中的 & 有关,您不应该 HTML-escaping 它——您应该 URI-encoding 它,但您可能早就知道了。

如果您的问题是您将其传递给需要正确编码 HTML 字符串的服务器,那么您应该重新考虑您的 API 设计。一般来说,最好将原始字符串存储在服务器上,并在必要时 decode/encode/escape/unescape 它们——请记住,服务器数据可能会在浏览器以外的上下文中显示。如果你真的想正确地向服务器发送 HTML-escaped 字符串,那么你需要担心的不仅仅是 &,还有其他特殊的 HTML 字符。为此,您应该使用您最喜欢的库或标准库中可能提供的一些实用程序:

function htmlEscape(str) {
  var div = document.createElement('div');
  div.textContent = str;
  return div.innerHTML;
}