JavaScript:在等号的每一边拆分带有文本的字符串(正则表达式)

时间:2016-04-22 19:36:48

标签: javascript regex string

我有以下示例字符串:

"msg=Hello World! param1=42 param2=abcd efgh"

我希望将其拆分为数组:

['msg', 'Hello World!', 'param1', '42', 'param2', 'abcd efgh']`

我尝试使用以下.split(/=/);,但这并不能解释空白。我怎么能拆分字符串来产生那个数组呢?

3 个答案:

答案 0 :(得分:3)

您可以使用此前瞻性正则表达式并抓取捕获组#1和组#2:

/(\w+)=(.+?)(?= \w+=|$)/gm

RegEx Demo

<强>代码:

&#13;
&#13;
var re = /(\w+)=(.+?)(?= \w+=|$)/gm; 
var str = 'msg=Hello World! param1=42 param2=abcd efgh';
var m;
var result=[];
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex)
        re.lastIndex++;
    result.push(m[1]);
    result.push(m[2]);
}

document.write("<pre>" + result + "</pre>");
&#13;
&#13;
&#13;

<强>输出:

["msg", "Hello World!", "param1", "42", "param2", "abcd efgh"]

答案 1 :(得分:1)

您可以将此模式与RegExp.prototype.exec方法一起使用:

/([^=\s]+)=([^=\s]*(?:\s+[^=\s]+)*)(?!\S)/g
# ^         ^      ^               ^---- ensures that a whitespace or the end of 
# |         |      |                     the string follows
# |         |      '-------------------- eventual parts of the value after 
# |         |                            whitespaces
# +---------+--------------------------- all characters that aren't whitespaces
# |         '- optional to allow         or equal signs
# |            empty values
# '- at least one for the key

demo

此模式避免了最终的尾随空格,即使值为空也会成功。

答案 2 :(得分:0)

使用String.matchArray.concat函数的简短替代解决方案:

var str = "msg=Hello World! param1=42 param2=abcd efgh", splitted = [];
str.match(/\w+?=[^=]+(?!\w+=)(\s|$)/gi).forEach(function(v){
    splitted = splitted.concat(v.trim().split("="));
});

console.log(splitted);   // ["msg", "Hello World!", "param1", "42", "param2", "abcd efgh"]