使用RegExp获取一系列单词,这些单词前后可能有空格,也可能没有空格

Using RegExp to get a series of words which may or may not have spaces before and after

本文关键字:空格 可能有 也可能 单词前 获取 RegExp 一系列 单词 使用      更新时间:2023-09-26

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

示例

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

我想得到"一系列文本"的结果,忽略冒号后面的任何空白,但在文本短语中包含空白。

我尝试为此开发regexp失败了,希望SO社区能提供帮助!

这是我糟糕的正则表达式(我提前为您即将看到的内容道歉):

:[^ ]('w*)+?(?='b)
> "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"

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

:'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);
}

对于这种特殊情况,可以使用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());