0

我有一个字符串,我只想修改它的某些部分。

我想用我自己的自定义文本[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]=有时and里面什么都没有&

var test2 = "http://www.facebook.com/sharer.php?s=100&p[url]=http://whatever&p[summary]=&p[title]=blahblahblah&p[images][0]=test.jpg";

我在想这样的事情,但这个 reg 不起作用

alert( test.replace("/^\[summary\]\=(.*)&/", "test") ) ;
4

3 回答 3

3

匹配字符串的^开头,因此,如果您的字符串都没有以[smmary].

删除它并将您的转换.*为否定类以避免贪婪匹配并提高性能:

/\[summary\]=[^&]*&/

请注意,您无需逃避=或捕获要替换的部件。

并替换为"[summary]=" + text + "&". 由于您希望在结果中拥有[summary]=and&但在替换本身中使用它,因此您需要将其放回原处,否则您将不会拥有任何一个[summary]=&结果(它们也被替换),而只有您的替换文本。

请注意,您没有引用正则表达式:

alert( test.replace(/\[summary\]=[^&]*&/, "[summary]=" + text + "&") ) ;

jsfiddle 演示


如果你想使用捕获组,你可以这样做:

alert( test.replace(/(\[summary\]=)[^&]*(&)/, "$1" + text + "$2") ) ;

但实际上没有必要,因为您已经知道捕获组将包含什么。

于 2013-10-04T19:56:26.370 回答
3

这应该这样做:

var newValue = "new text here";
test.replace(/(\[summary\]=)[^&]*(&)/, "$1" + newValue + "$2");

让我分解一下我做了什么:

  • test.replace( . . . );- 我想你理解这部分。;)

  • /. . ./- 正则表达式模式边界。. . 注意它周围没有引号(正则表达式模式不是字符串)。另请注意,我没有以 开头^或结尾的模式$,因为您尝试仅匹配字符串的一部分,而不是整个字符串。

  • (\[summary\]=)- 这不仅与您要查找的汇总值相匹配,而且由于它在括号中,它还捕获它以供以后替换使用。

  • [^&]*- 这匹配任何“非&”字符。不在括号里,因为我们是替换,所以不需要捕获值。

  • (&)- 这匹配&字符并捕获它以用于替换。

  • "$1" + newValue + "$2"- 这部分是重置价值。. . 它将正则表达式模式捕获的两个值($1= "[summary]=" 和$2= "&")包装在要插入到字符串中的新值周围。

我喜欢捕获这些值,因为它使您不必存储与其要替换的值匹配的字符串。. . 在我看来,最好只重用你匹配的东西。

于 2013-10-04T20:25:03.167 回答
0

删除起始帽子符号,省略引号并将贪婪匹配替换为不贪婪,像这样:

test.replace(/\[summary\]=(.*?)&/, "test")
于 2013-10-04T20:00:13.127 回答