正则表达式替换文本或在某些单词/字符之间留空

时间:2013-10-04 19:52:49

标签: javascript jquery regex

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

我希望用我自己的自定义文字替换[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") ) ;

3 个答案:

答案 0 :(得分:3)

^匹配字符串的开头,因此,如果您的字符串都不以[smmary]开头,则根本不会匹配。

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

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

请注意,您无需转义=或捕获要替换的部分。

并替换为"[summary]=" + text + "&"。由于您希望在结果中使用[summary]=&,但是在替换本身中使用它,您需要将其放回原处,否则您将不会拥有[summary]=或{{ 1}}在结果中(它们也被替换),但只有替换文本。

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

&

jsfiddle demo


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

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")