JavaScript正则表达式模式
我有一根像下面这样的线JavaScript正则表达式模式,javascript,regex,string,Javascript,Regex,String,我有一根像下面这样的线 var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5 var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5 Array( var1: "val1", var2: "val2", var3: "p1_p2_p3_p4", var4: "p1_p2", var5: "val5" ) 现在,我如何使用Re
var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5
var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5
Array(
var1: "val1",
var2: "val2",
var3: "p1_p2_p3_p4",
var4: "p1_p2",
var5: "val5"
)
现在,我如何使用RegExp将中的所有空格
替换为下划线
”
,使字符串如下所示
var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5
var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5
Array(
var1: "val1",
var2: "val2",
var3: "p1_p2_p3_p4",
var4: "p1_p2",
var5: "val5"
)
因此,通过使用.replace(''','').split('')
,我可以得到如下数组
var1=val1 var2=val2 var3="p1 p2 p3 p4" var4="p1 p2" var5=val5
var1=val1 var2=val2 var3="p1_p2_p3_p4" var4="p1_p2" var5=val5
Array(
var1: "val1",
var2: "val2",
var3: "p1_p2_p3_p4",
var4: "p1_p2",
var5: "val5"
)
请不要jQuery…选择您需要的一个:
对象:
var txt='var1=val1-var2=val2-var3=“p1\u p2\u p3\u p4”var4=“p1\u p2”var5=val5”,
arr=txt.split(“”),
obj={};
对于(变量i=0;i
数组:
var txt='var1=val1-var2=val2-var3=“p1\u p2\u p3\u p4”var4=“p1\u p2”var5=val5”,
arr=txt.split(“”),
列表=[];
对于(变量i=0;i
要将输入字符串中的每个字符串替换为另一个字符串,方法是将字符串中的空格替换为下划线。可以使用replace with callback执行此操作:
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'
我知道这个问题已经得到了回答,但我想我应该用一个积极的前瞻性来分享这个正则表达式。这允许你在不使用回调的情况下
替换
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
将重复搜索这不是数组。这是一个对象。数组是一个对象…我需要一个数组…为了更好地理解,我将它显示为对象…@Derek不是真的。恐怕这是语法错误,或者更可能的是,准IPHP notationWait,var1=val1 var2=val2
是字符串的一部分,还是仅仅是字符串的一部分“p1 p2..”位?@tjamesonvar1=val1 var2=val2 var3=“p1 p2 p3 p4”var4=“p1 p2”var5=val5
是一个字符串……与我的想法相同,只是我不需要捕获组;-)@JanDvorak我也不需要它们,因为它们的值是静态的。@只要你回答不完整……你的代码就会返回我var1=val1 var2 var3=”p1_p2 p3 p4 p5 p6 p7 p8“var4=”p1 p2“var5=val5
。。。它只替换var3
的第一个空格。。。而且var4
甚至都没有被碰过。。。在用''
分割字符串后,它返回一个可怕的数组。。。请在提交之前至少检查一次您的代码。。。你几乎完成了代码…@BlackCobra刚刚忘记在我的正则表达式末尾添加一个g
标志。将此:/(=”)([^“]*)(”)/
更改为:/(=”)([^“]*)(”)/g
,应该可以工作。@BlackCobra这怎么不完整?朋友,请不要介意。。。加里比你有更好的答案。。。希望你能理解…@BlackCobra这取决于你选择被接受的答案。请注意,Garyh的回答假设在引用的字符串中没有=
(并且在它的外部有一个=
),这假设在引用的字符串中没有=
,这是正确的,但由于Javascript不支持look behinds,我不得不挂接一些东西。如果这是海报的一个问题,那么你的答案是更好的。说到速度,你以很大的优势击败了我(IE除外):很好!我以前没见过jsperf.com。谢谢