【问题标题】:How can I add a whitespace before the first letter in a string?如何在字符串的第一个字母之前添加空格?
【发布时间】:2021-07-27 22:56:43
【问题描述】:

我正在尝试使用正则表达式在字符串中的第一个字母之前添加空格。例如,如果我有一个字符串“0.5g”,我希望字符串变为“0.5 g”。

我尝试运行一个在数字后添加空格的正则表达式查询,但是当它之间有小数点时,这会给我带来问题。

我目前的正则表达式是

'135mg'.replace(/(\d)([^\d\s%])/g, '$1 $2'); // Returns 135 mg as expected
'0.5g'.replace(/(\d)([^\d\s%])/g, '$1 $2'); // Returns 0. 5 g which is wrong as there is a whitespace before 5

谢谢

【问题讨论】:

  • 请参阅:How do I do X? SO 的期望是,提出问题的用户不仅会进行研究以回答他们自己的问题,还会分享研究、代码尝试和结果。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask
  • 您的输入是否都像"0.5g" 或者您必须在更长的字符串中找到并替换"0.5g"
  • 我们需要更多示例,最好是您输入的实际字符串。我们可以制作一两个正则表达式,它们可以与您的两个示例一起使用,但是当您在所有输入上运行它时会失败。

标签: javascript regex


【解决方案1】:

在 JavaScript 中可以在字符串的第一个字母之前添加一个空格

console.log( '135mg'.replace(/[a-zA-Z]/, ' $&') );
console.log( '135mg'.replace(/[a-z]/i, ' $&') );
console.log( '135mg'.replace(/([a-z])/i, ' $1') );

请参阅regex demo

注意

  • 正则表达式没有 g 标志,因此只有第一个匹配项会被替换
  • 替换模式中的$& 指的是整个匹配,您实际上不需要用捕获组包装整个模式并使用$1,但是很多人仍然喜欢这种变化,因为$& 是不知名。

【讨论】:

    【解决方案2】:

    使用您提供的两个示例,这对两者都适用

    ([\d.]*)([mg]+)
    

    它会查找数字和 '.' 的任何组合。后跟“m”和“g”的任意组合并返回

    135 mg
    0.5 g
    

    问题是它可以找到很多你不想要的东西,例如

    1.1.1.mm
    1.gggmmm
    

    问题是……有误报吗?你可以在你的样品上试一试,然后告诉我,我会试着调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多