认为你需要像这样:
/(?:\[([^\]]*)\]|([^\s]+))/g
您可以重复应用它(例如,使用Javascript可执行方法),然后从第一个和第二个捕捉器中提取值g组分别捕获标签和关键字。
试试看这里:
为了解释:
最外层()括起来的任一标签匹配的一个选择或关键字((由方括号[]括起来)没有用方括号括起来)。由于我们需要明确知道匹配的表达式是标记还是关键字,因此需要为每个捕获组分别设置一个单独的捕获组,因此?:bit会从捕获组中排除此选择位。
下一位[([^]] *)]匹配一个标签:开始和结束方括号需要用反斜杠转义以使它们成为文字。方括号内的位用括号括起来捕获第一个捕获组中的文本。除了在插入符号后面列出的内容之外,[^ ...]位可以匹配任何内容 - 所以在这种情况下除了结束方括号之外的任何内容。贪婪地重复使用*。
The |将选择分开,然后我们为关键字匹配表达式:([^ \ s] +)。再次,这是括号内,使结果出现在一个捕获组。这次我们匹配除空格以外的任何内容一次或多次。
最后,/ g是全局修饰符,以便所有匹配项匹配。