Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式模式_Javascript_Regex_String - Fatal编程技术网

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..”位?@tjameson
var1=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。谢谢