0
<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>
4

1 回答 1

1

这应该可以解决您的问题-可以通过一个正则表达式替换来实现:

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

jsFiddle 演示在这里

本质上发生的事情是正则表达式查找以方括号开头的字符串,该字符串[后面可能有也可能没有结束/,但后面是url,然后它将继续匹配直到遇到 a ],并且赢了'不在乎它在这一点上发现了什么。这样您就可以获得以下所有内容的匹配项:

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

我在上面提到,您textarea将 jQuery 中的字段名称从“文本”更改为“签名”,但从未发布包含第二个文本区域的 HTML - 我刚刚使用了相同的 - 在我上面的代码中的“测试”。

希望有帮助。

于 2013-02-23T09:17:21.317 回答