javascript - 使用正则表达式

时间:2017-11-14 08:49:42

标签: javascript regex dom

我想使用正则表达式将<font>元素转换为<span>元素:

输入:

[some strings...]<span [something]></span><font ...>[sometext]</font>[some strings...]

输出:

[some strings...]<span [something]>[sometext]</span>[some strings...]
  

注意:输入/输出是一个字符串。

很快,我想删除<font>元素并将其内容移动到<span>元素中,保留<span>元素的属性。

我试过这个:

const rx = /<span(.*?)><\/span>([^<\\s]+?|\\s*)<font(?:\\s+[^>]*)?>(.*?)<\/font>/gi;

inputStr.replace(rx, function(match, p1, p2, p3) { return `${p2}<span${p1}>${p3}</span>`; });

但它不起作用。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

如果可能的话,使用任何ID或类选择器,我在这里使用了标签名称,例如,如果你有一个Id选择器,那么从代码中删除[0]。 这个或有一些修改应该适合你

document.getElementsByTagName("font")[0].replaceWith('<span>' + document.getElementsByTagName("font")[0].innerHTML +'</span>')

使用Jquery,

$("YOUR_DOM_SELECTOR").replaceWith('<span>' + $("YOUR_DOM_SELECTOR").html() +'</span>')

答案 1 :(得分:0)

我也同意@skyboyer,这不是最好的方法,但是如果你只能使用regexp或者这是一次性任务,你可以使用一个类组指定来获取所有不是&#的字符。 34;&gt;&#34;,这样你可以获取标签范围的所有参数并在字体中使用它:

var text = 'Some text... <span style="color:red"></span><font style="margin:10px">Hi there!</font> other text <span style="color:blu"></span><font style="margin:10px">doh!</font> final text';
console.log(text.replace(/<span([^>]*)><\/span><font[^>]*>(.+?)<\/font>/gi,'<span$1>$2</span>'));
编辑

以匹配其他标签(显然除了其他标签)