Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
Regex替换2个单词并修改结果_Regex - Fatal编程技术网

Regex替换2个单词并修改结果

Regex替换2个单词并修改结果,regex,Regex,我有一个字符串示例: var s = 'type=audio&hls=&mp3=foo'; 我希望找到=和&之间的所有内容,并替换为引号+匹配值,因此得到以下结果: type="audio" hls="" mp3="foo" (match在引号中,即使其为空且&被替换为空格) 这是我的正则表达式,但不起作用: s = s.replace(/=.+?\\&/g,function(a,inside){ return '="'+inside+'" '; }

我有一个字符串示例:

var s = 'type=audio&hls=&mp3=foo';
我希望找到=和&之间的所有内容,并替换为引号+匹配值,因此得到以下结果:

type="audio" hls="" mp3="foo" 
(match在引号中,即使其为空且&被替换为空格)

这是我的正则表达式,但不起作用:

s = s.replace(/=.+?\\&/g,function(a,inside){
        return '="'+inside+'" ';
})

如果我们一次考虑你的正则表达式,这就是它的意思:

=    matches a literal equal sign
.+?  matches an optional string that has at least one character in it
\\   matches a literal backslash
&    matches a literal ampersand
除其他问题外,这要求输入字符串中必须有一个文本反斜杠,并要求字符串以一个符号and结尾。另外,
+?
可以缩短为
*
,但仍然是错误的,因为它可能在匹配的字符串中包含了符号和等号

另外,不需要用函数替换,因为JavaScript可以用字符串替换完成您正在做的事情

更好的正则表达式可能具有以下标记:

=       matches a literal equal sign
[^&]*   matches a string (possibly empty) that does not contain ampersands
&?      matches an optional ampersand
正如Wiktor在上文中指出的,这一切可以像这样结合在一起:

 s = s.replace(/=([^&]*)&?/g, '="$1" ').trim();

此处,括号用于标记正在替换的匹配图案部分,
$1
用于指括号中图案的标记部分,
.trim()
删除尾随空格。

您的意思是
s=s.replace(/=([^&]*)和?/g,“$1”).trim()
?或者仅仅是
s=s.replace(/=([^&]*)/g,“=”$1“)
?如果匹配包含或以&?结束,请注意
&?
在模式中,但在括号外。由于替换了整个匹配的图案(包括与符号),最终结果将不包括所需的任何与符号。括号中的图案部分(在等号之后开始,在与符号之前结束)是包含在结果双引号中的部分。所以,我相信这正是你想要做的。