取代「-';加上_&引用;在javascript中使用循环 我用同样的方法在C++中用“-”替换“-”,它工作正常,但在JavaScript中,它根本就不替换。p> function replace(str) { for(var i=0;i<str.length;i++) { if(str.charAt(i)=="-") { str.charAt(i) = "_"; } } return str; } 函数替换(str) { 对于(var i=0;i

取代「-';加上_&引用;在javascript中使用循环 我用同样的方法在C++中用“-”替换“-”,它工作正常,但在JavaScript中,它根本就不替换。p> function replace(str) { for(var i=0;i<str.length;i++) { if(str.charAt(i)=="-") { str.charAt(i) = "_"; } } return str; } 函数替换(str) { 对于(var i=0;i,javascript,Javascript,来说,它在javascript中足够简单,不值得创建一个新函数: 函数替换(str){ return str.replace(//-/g,'.''.')//使用带有“g”标志的正则表达式表示“全局” } console.log(replace(“hello-this-is-a-string”)您可以使用.split()和.join()轻松替换完整的字符串 函数替换(str){ 返回str.split(“-”).join(“”); } console.log(replace(“hello-th

来说,它在javascript中足够简单,不值得创建一个新函数:

函数替换(str){
return str.replace(//-/g,'.''.')//使用带有“g”标志的正则表达式表示“全局”
}

console.log(replace(“hello-this-is-a-string”)
您可以使用.split()和.join()轻松替换完整的字符串

函数替换(str){
返回str.split(“-”).join(“”);
}

console.log(replace(“hello-this-is-a-string”)
这是“确保阅读错误消息”的另一种情况

str.charAt(i) = "_";
对发生的事情的正确描述不是“它根本没有替换”,而是“它生成了一个运行时JavaScript错误”,在Chrome中,这个错误的措辞是

Uncaught ReferenceError: Invalid left-hand side in assignment
在Firefox中,它是

ReferenceError: invalid assignment left-hand side
这应该会给你提供追踪问题所需的线索

我重复一遍:仔细阅读错误消息。然后一遍又一遍地阅读它们。在大多数情况下,它们会准确地告诉您问题所在(如果您只花时间尝试理解它们),或者至少会为您指出正确的方向

当然,阅读错误消息假定您知道如何查看错误消息。您知道吗?在大多数浏览器中,都有一个“开发工具”窗口,通常通过F12,其中包含一个“控制台”,显示错误消息。如果您不了解devtools或控制台,请确保在编写一行代码之前理解它们

或者,你可以简单地在Stack Overflow上搜索,因为(几乎)所有的问题都已经在那里被问过了,特别是来自新来者的问题

我可以用javascript中的字符替换字符串中的字符吗

第一个的结果是,获得了400多张赞成票,第一个被接受的答案也是如此,内容如下:

在JavaScript中,字符串是不可变的,这意味着您所能做的最好的事情就是用更改的内容创建一个新字符串,并将变量指定给它

当你学习编程或学习一门新的语言时,你不可避免地会遇到一些你不知道的事情,或者让你困惑的事情。怎么办?在堆栈溢出上发帖几乎总是最糟糕的选择。毕竟,正如你所知,它不是教程网站,也不是帮助网站,也不是论坛。它是一个有趣的程序问答网站明问

在最好的情况下,你会得到尖刻的评论和答案,这会毁了你的一天;在最坏的情况下,你会被否决,并被否决,这不仅令人尴尬,而且实际上可能会阻止你在未来提问。既然你想确保自己能够在真正需要的时候提问,你最好还是离开在发帖之前,花更多的时间做一些研究,包括谷歌等搜索,针对一些简单的初学者问题。或者找一个专门帮助新手的论坛。或者问你旁边的人是否有。或者浏览一个或多个教程

但为什么要自己写呢? 但是,除非你把解决这个问题作为一种自学JavaScript的方法,作为一种训练练习,否则根本没有理由编写它。在计算历史上,它已经被编写了数百次,甚至可能数千次。而且绝大多数的实现都会更好、更快,因此,作为一名“程序员”,你的工作不是写一些将破折号转换为下划线的东西,而是查找使用可以转换的东西

正如智者所说,今天我们不再编写算法;我们将API调用串在一起。我们的工作是找到并理解要调用的API

对于Google来说,找到API一点也不难。在这种情况下,如果您知道带下划线的字符串有时被称为“snake cased”,但即使不知道您可以通过查询在Google结果的第一页上找到某些内容,例如“javascript将字符串转换为使用下划线库”,这可能会有所帮助

第一个结果,也是您应该看到的结果,是一个字符串实用程序集合,它是按照通用的“下划线”库的精神编写的,并设计用于该库。它提供了一个名为的API。除了处理“dasherized”输入(您的案例)外,它还处理其他字符串/标识符格式,例如“骆驼案”

即使您不想导入此特定库并使用它(您可能应该这样做),您也最好窃取或克隆它,其简化形式为:

str
  .replace(/([a-z\d])([A-Z]+)/g, '$1_$2')
  .replace(/[-\s]+/g, '_')
这并不像看上去那么复杂。第一部分是处理camelCase输入,这样
“catsAndDogs
”就变成了
“cats and dogs”
。第二行是处理破折号和空格的。)。仔细看——它用一个下划线替换多个破折号的运行。这很容易成为您也想要做的事情,具体取决于谁正在对转换后的字符串执行操作。这是一个完美的例子,其他编写此任务的专业级库的人认为您可能不需要n编写自己的解决方案

请注意,正如另一个答案所表明的那样,这个广受赞誉的、经过精心处理的库并没有使用
split/join
技巧在字符串中进行全局替换。这种方法在近十年前就不再使用了


除了省去自己编写的麻烦,最终得到更好的代码外,如果你花时间去理解它的功能,你最终也会对正则表达式有更多的了解。

Javascript字符串是不可变的。Y