【问题标题】:Using RegExp to get a series of words which may or may not have spaces before and after使用 RegExp 获取一系列前后可能有空格或没有空格的单词
【发布时间】:2016-05-11 08:17:52
【问题描述】:

我正在尝试匹配冒号 (:) 字符后的一系列文本,而忽略前后的空白字符。

例子

someWord: a series of text
-or-
someWord:        a series of text  

我想得到“一系列文本”的结果,忽略冒号后的任何空格,但在文本短语中包括空格。

我为此想出正则表达式的尝试失败了,希望 SO 社区可以提供帮助!

这是我的错误正则表达式(对于您将要看到的内容,我提前道歉):

:[^ ](\w*)+?(?=\b)

【问题讨论】:

  • 只需将其与:(.*) 匹配,然后修剪即可。
  • 或者,在冒号上拆分并获取最后一个元素并修剪。
  • 是的,一切都取决于这一系列文字是什么。
  • 你可以使用\:\s*(.*)$,然后从比赛中获取索引为1的组

标签: javascript regex


【解决方案1】:
> "someWord: a series of text".match(/:\s*(.*)$/)
[": a series of text", "a series of text"]

要获取文本,您可以使用第一个索引来引用捕获的组,对于字符串末尾的空格,您可以使用 trim():

> "someWord:        a series of text  ".match(/:\s*(.*)$/)[1].trim()
"a series of text"

【讨论】:

    【解决方案2】:

    如果您只有一个匹配项(字符串中没有几个;请参阅我的问题),那么我认为您正在寻找

    :\s*(.*?)\s*$
    
    • : 匹配冒号
    • \s* 匹配零个或多个空白字符(贪婪)
    • (...) 是目标文本的捕获组
    • .*? 是对任何一系列字符的非贪婪捕获
    • \s*$ 是最后对空白的贪婪捕获

    var s1 = "someWord:     a series of text    ";
    var match = /:\s*(.*?)\s*$/.exec(s1);
    log("Input: '" + s1 + "'");
    log("Result: '" + match[1] + "'");
    
    function log(msg) {
      var p = document.createElement('pre');
      p.appendChild(
        document.createTextNode(msg)
      );
      document.body.appendChild(p);
    }

    【讨论】:

    • 想象一下如果输入字符串没有换行符并且有几兆字节长会发生什么。延迟匹配很可能会导致超时问题。
    • @WiktorStribiżew:总是可以想象各种各样的事情。由于问题中没有任何暗示,因此这是无关紧要的猜测。
    • 我只想指出,这种方法在 JavaScript 中效率很低。
    • @WiktorStribiżew:嗯,首先,我不会盲目地接受你的前提。但更重要的是,过早的优化正是如此:过早。
    • 刚刚尝试过:在第一个 ~5MB 之后某处带有目标文本的 ~20MB 字符串上,在我的 Core i5 3.3GHz 机器上用了 129ms 来匹配 Node 中的 V8(结果匹配字符串是〜15MB)。 (我多大了,我先写 MHz 并且不得不退格?!)
    【解决方案3】:

    对于这种特殊情况,您可以使用split:

    document.write("someWord: a series of text".split(':')[1].trim());
    document.write('<br>'); // just to insert a new line for printing
    document.write("someWord:        a series of text".split(':')[1].trim());

    【讨论】:

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