JavaScript 替换函数

标签 javascript replace

我正在使用 javascript 函数,但遇到了一个小问题。我希望函数将“输入”替换为“#”,所以我使用:coment = coment.replace(/\\n/gi,"*#*");当评论有任何“输入”但当评论没有任何“输入”或评论为空白时,它会完美运行,它会停止工作并发送错误消息:

'NoneType' 对象没有属性 'replace'

我如何控制它是否有任何“输入”它替换,如果没有,则不做任何事情

“评论”来自于:

<textarea id="coment"></textarea>

谢谢!

最佳答案

声明

coment = coment.replace(/\\n/gi,"*#*");

...表示“用 #(不区分大小写)替换字符串中反斜杠后跟字母 n 的所有部分。如果您的目标是替换换行符,你的反斜杠太多了:

coment = coment.replace(/\n/gi,"*#*");

不过,这本身并不是问题。从错误消息来看,有时 comment 似乎不是字符串,因此没有 replace 功能。可能是 undefinednull。如果您知道它将是 undefinednull 或字符串,您可以这样做:

if (coment) {
    coment = coment.replace(/\n/gi,"*#*");
}

如果它可能是一个数字或其他东西,不管你最后总是想要一个字符串,那么:

coment = (coment === undefined || coment === null)
         ? ""
         : String(coment).replace(/\n/gi,"*#*");

(不要只是做 comment = comment ? ... 因为如果 comment 是数字 0,那不会给你的预期结果。)


顺便说一句,因为一些浏览器使用 \r\n 作为换行符而其他浏览器使用 \n,你可能最好使用 \r?\n (或 \r{0,1}\n),而不仅仅是正则表达式中的 \n

关于JavaScript 替换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9067537/

相关文章:

javascript - 在输入标签上按 Enter 键后,removeEventListener onfocusout - 错误未定义

javascript - (插件 commonjs) SyntaxError : Unexpected token when packaging vue component with rollup

javascript - 滚动溢出的元素时禁用窗口滚动

java - 如何将字符串转换为具有最少字符替换数的回文字符串,以便回文字符串包含给定的单词?

MySQL 替换不工作

javascript - 查找并替换可能包含子元素的 html 元素的文本部分

javascript - 来自构造函数的 HTML 元素标签名称

javascript - 改进 HTML5 视频和 jQuery 代码以提高效率

javascript - JS : get hostname from url , 正则表达式不工作

regex - VIM搜索并替换: change string before replace