使用正则表达式从textarea中删除字符串

时间:2013-02-23 08:57:52

标签: jquery regex

<textarea name="test">
  test
  [url=http://test.com]test[/url]
  [url][img]http://test.com/test.jpg[/img][/url]
  test
</textarea>

如何删除[url][/url][url=][/url]中包含的所有内容,但保留[img]

我尝试了什么:

var value = $('textarea[name="test"]').val();
value = value.replace(/\[url=(.+?)\](.+?)\[\/url\]/g, '');
value = value.replace(/\[url=(.+?)\]/g, '');
value = value.replace('[url]', '');
value = value.replace('[\/url]', '');
$('textarea[name="test"]').val(value);

预期产出:

<textarea>
  test

  [img]http://test.com/test.jpg[/img]
  test
</textarea>

1 个答案:

答案 0 :(得分:1)

这应该排除你 - 可以用一个正则表达式替换来实现:

var value = $('textarea[name="test"]').val();
value = value.replace(/\[\/?url([^\]]+)?\]/g, '');
$('textarea[name="test"]').val(value);

jsFiddle Demo here

正是在那里发生的事情是正则表达式查找以方括号[开头的字符串,该字符串可能会或可能不会跟随结束/,但是然后是url,然后它会继续匹配,直到遇到],并且不会关心它找到的那一点。这样就可以获得以下所有内容的匹配:

  • [url]
  • [/url]
  • [url=http://www.google.com]
  • [url hello world this is nice](如果你真的想要:-P)

我在上面提到过,您可以在&#39; text&#39;中更改jQuery中textarea字段的名称。签名&#39;但从未发布包含第二个textarea的HTML - 我刚刚使用了同一个 - &#39; test&#39;在上面的代码中。

希望有所帮助。