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“)
?如果匹配包含或以&?结束,请注意&?
在模式中,但在括号外。由于替换了整个匹配的图案(包括与符号),最终结果将不包括所需的任何与符号。括号中的图案部分(在等号之后开始,在与符号之前结束)是包含在结果双引号中的部分。所以,我相信这正是你想要做的。