【问题标题】:RegEx last space issue正则表达式最后一个空格问题
【发布时间】:2015-09-21 09:06:40
【问题描述】:

我的正则表达式 = /\s+/

我想实现所有数字都用空格分隔。它有效,但它也捕获了最后一个空格(因为我正在拆分它,最后一个空格作为“”数组元素)。

“123 123 213” - 工作正常。

“21 12 21 421” - 捕获最后一个空格。

我该如何解决这个问题?

【问题讨论】:

  • 你在这里使用的语言

标签: javascript regex


【解决方案1】:

在运行正则表达式并完成之前修剪字符串。

【讨论】:

  • 我不知道你用的是什么语言,但是来的语言有 ltrim(rtrim( yourstring )) LEFT TRIM, RIGHT TRIM
  • javascript,上面已经提到了。修剪工作正常,但空字符串不会以某种方式修剪。
  • 好的,知道了。它的值为“”。现在它修复了。感谢您的解决方案!
【解决方案2】:

您可以简单地使用单词边界。

\b\s+\b

DEMO

【讨论】:

  • 它可以工作,但它仍然读取第一个空格。我的意思是,如果字符串 == " "
  • 怎么样?这是不可能的。
  • 会很好地分割,但尾随空格仍然存在。试试"21 12 21 421 ".split(/\b\s+\b/)
  • @EirikBirkeland 是的,最后一个空间仍然存在,认为这是 op 所期望的,不是吗?
【解决方案3】:

直接在字符串上使用这个正则表达式:\s+(?=\S),不需要修剪。 (demo)

这匹配任何后跟至少一个非空格字符的空格。

【讨论】:

    【解决方案4】:

    剪掉任何前导和尾随空格,然后拆分:

    var numArr = "21 12 21 421 ".replace(/^\s+|\s+$/g, "").split(/ +/);

    就是这样。


    根据您的环境,您可以只使用内置的 trim 方法。

    var numArr = "21 12 21 421 ".trim().split(" ");


    如果你没有 trim,但又想用,可以试试Mozilla的这个 polyfill:

    if (!String.prototype.trim) {
      String.prototype.trim = function () {
        return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
      };
    }
    

    【讨论】:

    • 嗯...有趣的解决方案,它可以正常工作,除了 1 个案例。如果我们放一个像“213 ___”这样的字符串 - 这些最后的空格被算作元素。
    • 糟糕,忘了 g - 现在试试。没有全局标志,它只会执行一次操作。此外,如果存在,它现在会在数字之间的多个空格上拆分:/ +/
    猜你喜欢
    • 2023-02-22
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多