我有一个字符串,我只想修改它的某些部分。
我希望用我自己的自定义文字替换[summary]=
和&
之间的所有内容。
这是一个字符串示例
var test = "http://www.facebook.com/sharer.php?s=100&p[url]=http://whatever&p[summary]=aaa&p[title]=blahblahblah&p[images][0]=test.jpg";
有时[summary]=
和&
var test2 = "http://www.facebook.com/sharer.php?s=100&p[url]=http://whatever&p[summary]=&p[title]=blahblahblah&p[images][0]=test.jpg";
我在考虑这样的事情,但这个规则不起作用
alert( test.replace("/^\[summary\]\=(.*)&/", "test") ) ;
答案 0 :(得分:3)
^
匹配字符串的开头,因此,如果您的字符串都不以[smmary]
开头,则根本不会匹配。
删除它并将.*
转换为否定类以避免贪婪匹配并提高性能:
/\[summary\]=[^&]*&/
请注意,您无需转义=
或捕获要替换的部分。
并替换为"[summary]=" + text + "&"
。由于您希望在结果中使用[summary]=
和&
,但是在替换本身中使用它,您需要将其放回原处,否则您将不会拥有[summary]=
或{{ 1}}在结果中(它们也被替换),但只有替换文本。
请注意,您不引用正则表达式:
&
如果你想使用捕获组,你可以这样做:
alert( test.replace(/\[summary\]=[^&]*&/, "[summary]=" + text + "&") ) ;
但实际上没有必要,因为你已经知道捕获组将包含什么。
答案 1 :(得分:3)
这应该这样做:
var newValue = "new text here";
test.replace(/(\[summary\]=)[^&]*(&)/, "$1" + newValue + "$2");
让我打破我的所作所为:
test.replace( . . . );
- 我想你理解这一部分。 ;)
/. . ./
- 正则表达式模式边界。 。 。注意它周围没有引号(正则表达式不是字符串)。另请注意,我没有使用^
启动模式或以$
结束模式,因为您只尝试匹配字符串的一部分,而不是整个字符串。
(\[summary\]=)
- 这不仅与您要查找的汇总值相匹配,而且由于它在括号中,因此它也会捕获它以便在替换后使用。
[^&]*
- 这匹配任何"非 - &
"字符。它不在括号中,因为我们正在替换,所以我们不需要捕获价值。
(&)
- 这与&
字符匹配并捕获它以用于替换。
"$1" + newValue + "$2"
- 此部分是替换值。 。 。它包含正则表达式模式捕获的两个值($1
=" [summary] ="和$2
="&")围绕新的要插入字符串的值。
我喜欢捕获值,因为它使您不必存储与其替换的值匹配的字符串。 。 。在我看来,最好只重用你匹配的东西。
答案 2 :(得分:0)
删除起始帽子符号,省略引号并用ungreedy替换贪婪匹配,smth就像这样:
test.replace(/\[summary\]=(.*?)&/, "test")