用正则表达式解析我的用户输入字符串会是 possible/advisable 吗?

Would it be possible/advisable to parse my user input string w regexp?

我正在尝试根据以下规则拆分字符串。

test1 test2 test3           => [test1, test2, test3]
test1 test2:a b test3:c d   => [test1, test2:a b, test3:c d]
test1 test2:"a b" test3:c d => [test1, test2:"a b", test3:c d]

我可以举出更多的例子,但本质上,每个 space 分隔的单词应该是结果列表中它自己的条目,除非该单词出现在冒号之后。到那时,spaced 个词应该被认为是前一个词的一部分,直到分号前面的下一个词。

我这样做是为了创建我自己的小搜索引擎的初始阶段,我需要一种方法来解析用户提供的输入。我试图避免强迫用户做这样的事情

test1 test2:(a, b) test3:(c, d)

虽然我想如果它更美观就好了。

我相信这可以用 javascript 正则表达式来完成,但老实说,我对它们很糟糕,而且有一半时间都无法理解它们是如何工作的。

谁能给我建议如何以这种方式拆分我的字符串,无论是正确的正则表达式还是其他更可取的方法?

谢谢!

编辑:

我已经有一些代码可以进行一些解析而不是使用正则表达式,但它已经变得又长又复杂。这个问题主要是为了看看正则表达式是否是更好的方法。

编辑2:

完全放弃正则表达式方法。 Salman A 想出了一个非常简洁的方法来做我想做的事情,彻底颠覆了我之前的代码。

我知道我应该解析它:

function parseQuery(query) {
  var tokens = query.split(/\s+/), i = 0, prev, curr;
  while (i < tokens.length - 1) {
    curr = tokens[i];
    next = tokens[i + 1];
    if (curr.indexOf(":") >= 0 && next.indexOf(":") < 0) {
      tokens.splice(i, 2, curr + " " + next);
    } else {
      i++;
    }
  }
  return tokens;
}
var tests = [
    'test1',
    'test1 test2',
    'test1 test2 test3',
    'test1 test2:a b test3:c d',
    'test1 test2:a b test3:c d e',
    'test1 test2:a b test3:c d e test4:f',
], i;
for (i = 0; i < tests.length; i++) {
  console.log(tests[i], parseQuery(tests[i]));
}
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>