JavaScript:如果有冒号,删除最后一个字符

79

这位相对新手想要一种方法,以便在字符串末尾为冒号的情况下将其删除。

我知道myString = myString.replace('/^\\:/');可以用于行首,但不确定如何使用 $ 字符来表示行末... 有人能帮忙纠正吗?

谢谢

3个回答

139

正则表达式字面量(/.../)不应该出现在字符串中。将你的代码更正,去掉字符串开头的冒号,你可以得到:

myString = myString.replace(/^\:/, '');
为了匹配字符串末尾的冒号,应该在冒号后面放置$ 而不是在冒号前面放置^
myString = myString.replace(/\:$/, '');

您也可以使用纯字符串操作来完成:

if (myString.charAt(myString.length - 1) == ':') {
  myString = myString.substr(0, myString.length - 1);
}

感谢您详细的回答。作为一个新手,我理解使用反斜杠作为转义字符,但是在replace语句中为什么会有多个正斜杠和反斜杠呢? - neil
@neilf:斜杠/.../是正则表达式字面量。在正则表达式中,有一个反斜杠来转义冒号字符,以便它被解释为字面字符,并且在表达式中没有特殊含义。(我已经更正了上面的代码,它有双反斜杠来转义模式以将其放入字符串中,即new Regex('^\\:'),您的原始代码是一种正则表达式字面量和正则表达式字符串的混合形式。) - Guffa
我之前不知道/.../这种格式,只知道反斜杠 - 谢谢你的解释。 - neil
谢谢Guffa,你太棒了!我使用了你的正则表达式答案,轻松地操作了URL中的其他字符。 - Andrejs

42

尝试简单地使用

myString = myString.replace(/:$/, '');

这段代码将会在字符串末尾移除:


1
我需要删除字符串输入末尾的任意数量的换行符。您的示例作为一个坚实的起点。然后我使用 regexr 进行测试和改进。最后,我想出了 /(\n$)+/gm,它似乎完美地工作。感谢您简单而有效的答案。 - Mentalist
1
@Mentalist,应该是/\n+$/:量词应该跟随换行符,而不是结束定界符。 - Fabrizio Calderan

0

$ 需要放在正则表达式的末尾以匹配行尾。

/:$/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接