2

我有一个像下面这样的字符串......

var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5

现在我如何才能使用 RegExp 仅在内部替换所有white spaces字符串underscore""以便字符串如下所示...

var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5

这样通过使用.replace('"','').split(' '),我可以得到一个如下所示的数组......

Array(
   var1: "val1",
   var2: "val2",
   var3: "p1_p2_p3_p4",
   var4: "p1_p2",
   var5: "val5"
)

请不要 jQuery...

4

4 回答 4

2

您希望通过用字符串中的下划线替换空格来将输入字符串中的每个字符串替换为另一个字符串。您可以使用回调替换来做到这一点:

var inp='var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5'

var outp=inp.replace(/"[^"]*"/g, function(x){
  return x.replace(/ /g, '_');
})

// var outp === 'var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5'
于 2012-11-21T06:41:54.827 回答
2

我知道这已经得到解答,但我想我会使用积极的前瞻性来分享这个正则表达式。这允许您replace不使用回调。

var str = 'var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5';

str = str.replace(/\s(?=[^=]*")/g, '_');

解释:

\s        match a space...
(?=       start of positive look-ahead
[^=]*"    ...which is followed by anything except an =, up to a double-quote
)         end of positive look-ahead

然后g将重复搜索

于 2012-11-21T09:31:16.303 回答
1
var arr = string.replace(/(=")([^"]*)(")/g,function(m,g1,g2,g3){return g1 + g2.replace(/ /g, "_") + g3;}).split(' ');
于 2012-11-21T06:40:54.583 回答
0

选择您需要的:

目的:

var txt = 'var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5',
    arr = txt.split(" "),
    obj = {};

for(var i = 0 ; i < arr.length; i++){
    var ind = arr[i].match(/^(.+)=/)[1],
        val = arr[i].match(/=(.+)$/)[1].replace(/_/g," ");
    obj[ind] = val;
}

console.log(obj);  //This will give you an object.
// {
//     var1: "val1",
//     var2: "val2",
//     var3: ""p1 p2 p3 p4"",
//     var4: ""p1 p2"",
//     var5: "val5"
// }

大批:

var txt = 'var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5',
    arr = txt.split(" "),
    list = [];

for(var i = 0 ; i < arr.length; i++){
    var val = arr[i].match(/=(.+)$/)[1].replace(/_/g," ");
    list.push(val);
}

console.log(list);  //This will give you an array.
// [
//     "val1",
//     "val2",
//     ""p1 p2 p3 p4"",
//     ""p1 p2"",
//     "val5"
// ]
于 2012-11-21T06:26:09.963 回答