[英]JavaScript RegExp pattern
我有一個像下面這樣的字符串...
var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5
現在,我如何使用RegExp僅在""
內用underscore
替換所有white spaces
,以便字符串如下所示:
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 ...
您想通過用字符串中的下划線替換空格來用另一個字符串替換輸入字符串中的每個字符串。 您可以使用帶有替換的回調來做到這一點:
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'
我知道已經回答了這個問題,但我想我應該積極地與大家分享這個正則表達式。 這使您可以在不使用回調的情況下進行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
將重復搜索
var arr = string.replace(/(=")([^"]*)(")/g,function(m,g1,g2,g3){return g1 + g2.replace(/ /g, "_") + g3;}).split(' ');
賓語:
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"
// ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.