正则表达式匹配特定字符前后的字符串

时间:2018-02-16 22:29:01

标签: javascript regex performance

我想进行分组以在特定字符之后的AND之前选择字符串,在这种情况下它是冒号。

示例:

First: foo Last: bar

我想在第1组匹配First和foo,在第2组匹配Last bar

第1组:First foo

第2组:Last bar

我目前有

([^:]*)+([^:*])

只匹配不是冒号的所有东西,这不是我正在寻找的东西。正则表达式有哪些方式或模式,我可以在某个角色之前和之后匹配?

3 个答案:

答案 0 :(得分:2)

如果你想删除冒号,但仍然在一个组中有周围的文本,你需要在执行正则表达式后使用一些字符串操作:



var s = "First: foo Last: bar",
    re = /\s*([^:]*?)\s*:\s*([^:\s]*)/g,
    result = [];
while (match = re.exec(s)) {
    result.push(match[1] + ' ' + match[2]);
}

console.log(result);




请注意,当有更多空格时,哪个词所属的位置可能不明确,例如在First: foo hello there: bar中。

答案 1 :(得分:0)

你想要进入单一群体的文本不是连续的字符串,因此,它是不可能实现的。你需要分别抓住两个部分,键和值,然后加入它们:



var rx = /([^:]+):\s*(.*?)(?=\w+:|$)/g;
var s = "First: foo Last: bar";
var m, res=[];
while (m=rx.exec(s)) {
  res.push([m[1].trim(),m[2].trim()].join(" "));
}
console.log(res);




请参阅regex demo at regex101.com。详细说明:

  • ([^:]+) - 第1组::
  • 以外的一个或多个字符
  • : - :
  • \s* - 0+ whitespaces
  • (.*?) - 第2组:除了换行符之外的任何0 +字符,尽可能少
  • (?=\w+:|$) - 后跟1个单词字符和:或字符串结尾。

答案 2 :(得分:0)

您可以使用以下正则表达式:

([a-zA-Z]+:\s*[a-zA-Z]+) 

您可以在 HERE 链接上试用。

'First: foo Last: bar'.match(/([a-zA-Z]+:\s*[a-zA-Z]+)/g) // ["First: foo", "Last: bar"]