JavaScript替换函数

JavaScript Replace Function

本文关键字:函数 替换 JavaScript      更新时间:2023-09-26

我正在使用一个javascript函数,但我遇到了一个标题问题。我希望函数将"回车"替换为"#",所以我使用:coment = coment.replace(/''n/gi,"*#*");,当注释有任何"回车"时,它工作得很好,但当注释没有任何"enter"或注释为空时,它停止工作并发送一个错误,说:

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

我如何控制,如果它有任何"输入",它会替换,如果没有,就不会做任何

"coment"来自这个:

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

谢谢!

语句

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

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

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

不过,单凭这一点并不是问题所在。从错误消息中,听起来coment有时不是字符串,因此没有replace函数。可能是undefinednull。如果你知道它是undefinednull或字符串,你可以这样做:

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

如果它可能是一个数字或其他什么,并且不管你总是希望最后有一个字符串,那么:

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

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


顺便说一句,由于一些浏览器使用'r'n作为换行符,而另一些浏览器则使用'n,因此在正则表达式中使用'r?'n(或'r{0,1}'n)可能比仅使用'n更好。

问题取决于coment中的实际内容。如果coment中有一个DOM元素,那么您需要从输入字段中获取值,以便它有一个字符串:

coment.value = coment.value.replace(/'n/g,"*#*");

如果问题是coment有时为null或未定义,我建议先检查一下coment中是否有一个有效的字符串:

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

对于null或未定义的情况,您也可以像这样先决条件coment

coment = coment || "";
coment = coment.replace(/'n/g,"*#*");

您可能会注意到,我在replace函数中也更改了一些内容。如果您只是想替换换行符,则不需要在regex定义中使用双反斜杠,也没有理由在regex上使用"i"标志,因为模式中没有任何字母。

要具体了解这些应用程序中的哪一个,您需要向我们展示将值输入到coment中的代码,以便我们可以看到它实际包含的内容,或者您需要在调试器或console.log中检查coment以查看它包含的内容。

这听起来像"空白"注释不是字符串,而是类似于null的内容,因此它没有replace函数。

尝试

coment= (comment && coment.length>0)?coment.replace(/''n/gi,"*#*"):coment;