使用.replace替换<b> <u>和<i>标签的任意组合</i> </u> </b>

时间:2015-01-27 12:18:29

标签: javascript

我使用.replace JavaScript方法替换字符串中的<b><u><i>标记。

var $text = 'This is some <b><u><i>bold underlined italic text</i></u></b>';
$text.replace(new RegExp('<(/?)b><(/?)u><(/?)i>','gmi'), '<div>').replace(new RegExp('<(/?)i><(/?)u><(/?)b>','gmi'), '</div>');

然而,这并不理想,因为只有标签按此顺序才有效。如果我的字符串是

,它将无法工作
var $text = 'This is some <i><b><u>bold underlined italic text</u></b></i>';

我可以使用哪种方法允许这三种标签的任意组合?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

为什么不创建三个RegExp,然后只创建$text.replace(regex1,'foo').replace(regex2,'foo').replace(regex3,'foo') 你的regex1 ... 3只包含一个标签

虽然这是愚蠢的方法,但也是最简单的方法,易于理解,其他的可能是使用|所有这些标签之间的正则表达式中的量化器 编辑这会产生foo的三倍,这是你不想要的。

$regexp = new RegExp('(<(/?)b>)|(<(/?)u>)|(<(/?)i>)','gmi');

编辑这个选项最适合你,根据@Vbyec你可以用更好更短的方式写这个

$regexp = new RegExp('(<\/?(u|i|b)>)+','gmi')

答案 1 :(得分:1)

您需要删除所有 b,u,i 标记吗?

$text.replace(/(<\/?(u|i|b)>)/gmi,"")