2

以下のような文字列があります...

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

文字列が以下のようになるように、RegExpを使用してすべてwhite spacesunderscore内部のみに置き換えるにはどうすればよいですか...""

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

文字列内のスペースをアンダースコアに置き換えることにより、入力文字列内の各文字列を別の文字列に置き換える必要があります。これを行うには、replacewithコールバックを使用できます。

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 に答える