正则表达式,用解析用空格分隔的引号来解析字符串组

时间:2018-02-21 20:44:15

标签: regex

给定一行没有任何换行符的字符串,我想得到一组字符串,这些字符串可能由引号组成并用空格分隔。只有当它在引号内时才允许使用空格。 E.g。

A =" 1234" gg b = 5678 c =" 1 2 3"

结果应该有4组:

  1. A =" 1234"
  2. GG
  3. B = 5678
  4. c =" 1 2 3"
  5. 到目前为止,我有这个

    line.replace('\|',' ')

    但这无法捕获第二组" gg"。我无法检查文本前后是否有空格,因为这将包含引号内有空格的字符串。

    任何帮助将不胜感激!感谢。

    被修改 这是针对javascript的

2 个答案:

答案 0 :(得分:0)

如果我没有误解你所说的这就是你要找的东西。

\w+=(?|"([^"]*)"|(\d+))|(?|[a-z]+)

将其视为一种后备选项,可以在更通用的选项前面使用更复杂的选项。

或者,您可以删除第二个?|并将其作为一个不同的组捕获,以便您可以检查该组(第2组)

答案 1 :(得分:0)

在JavaScript中,您可以使用以下正则表达式:

/\w+(?:=(?:"[^"]*"|\S+)?)?/g

请参阅regex demo

<强>详情

  • \w+ - 1+个字母,数字或/和_
  • (?:=(?:"[^"]*"|\S+)?)? - 可选序列:
    • = - 等号
    • (?:"[^"]*"|\S+)? - 可选序列:
      • "[^"]*" - ",然后是"以外的0 +字符,然后是"
      • | - 或
      • \S+ - 1 +非空白字符

JS演示:

var rx = /\w+(?:=(?:"[^"]*"|\S+)?)?/g;
var s = 'a="1234" gg  b=5678  c="1 2 3" d=abcd e=';
console.log(s.match(rx));