【问题标题】:remove extra spaces in string in javascript在javascript中删除字符串中的多余空格
【发布时间】:2021-10-10 20:49:33
【问题描述】:

我有一个文本,在删除特殊字符 (!@#$%^&*()-=+`";:'><.>

    const input : 'this is a signal , entry : 24.30 and side is short';

    const text = input.replace(/\.(?!\d)|[^\w.]/g, " ").toUpperCase();

    console.log(text.split(" "))

输出:

[
  'THIS',   'IS',    'A',
  'SIGNAL', '',      '',
  '',       'ENTRY', '',
  '',       '24.30', 'AND',
  'SIDE',   'IS',    'SHORT'
]

但我想成为这样的人:

[
  'THIS',   'IS',    'A',
  'SIGNAL', 'ENTRY', '24.30',  
  'AND',    'SIDE',   'IS',     
  'SHORT'
]

当我替换空格并输入空字符串时,返回:

[ 'THISISASIGNALENTRY24.30ANDSIDEISSHORT' ]

我的代码有什么问题?

【问题讨论】:

  • 您当前的代码会产生 SyntaxError。
  • 如果你不想要空格,为什么不直接用空字符串替换?
  • 在上面写上.filter(Boolean)
  • @CertainPerformance 我编辑了问题
  • @RaniSharim 已编辑,请再次检查

标签: javascript string whitespace


【解决方案1】:

不要替换,而是考虑匹配你想要生成单词数组的所有类型的字符。看起来你想要这样的东西:

const input = 'this is a signal , entry : 24.30 and side is short';
const matches = input.toUpperCase().match(/[\w.]+/g);
console.log(matches);

【讨论】:

  • 谢谢。它有效
  • _ 是单词字符。如果要排除它们,请将\w 替换为您要匹配的所有字符,例如/[a-z0-9.]+/gi
  • 但我希望这些点不在输出端,仅适用于像 34.2 这样的浮点数。当我在文本中有一个点时,使用这个正则表达式,它会返回它。
  • 然后用带点的数字替换类似单词的字符(不带点)。 /[a-z]+|\d+(?:\.\d+)?/gi
【解决方案2】:

replace 方法中的第二个参数必须是空字符串,而不是代码中的空格。

只要做:

...
const text = input.replace(/\.(?!\d)|[^\w.]/g, "").toUpperCase();
...

【讨论】:

  • 当我使用空字符串时,返回这个:[ 'THISISASIGNALENTRY24.30ANDSIDEISSHORT' ]
猜你喜欢
  • 2013-10-09
  • 2011-08-05
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-20
相关资源
最近更新 更多