我想我有一个字符串:
dynamic dynObj = JsonConvert.DeserializeObject(html);
我需要输出
<a href="site/project/109#" target="_blank">href</a> text, text, <a href="/target" class="test">test</a>
我可以找到所有链接
site/project/109# text, text, test
并在循环中进行替换。但是我想缩短代码,通过单个替换来做所有事情,如下所示:
var txt = msg.match(/\<a\shref=\"(.*)\"\s(.*)[\<\/a\>]/gmi);
但在这种情况下,我得到: [object HTMLHeadElement]
答案 0 :(得分:2)
永远不要使用正则表达式来解析HTML,最好使用内容生成一个元素,然后在元素上执行其余操作。
var str = '<a href="site/project/109#" target="_blank">href</a> text, text, <a href="/target" class="test">test</a>';
// create an element
var temp = document.createElement('div');
// set the content with the string
temp.innerHTML = str;
// get all `a` tags and convert into array
// for older browser use `[].slice.call()
// for converting into array
Array.from(temp.querySelectorAll('a')).forEach(function(ele) {
// create a text node with the attribute value
var text = document.createTextNode(ele.getAttribute('href'));
// replace a tag wit the text node
ele.replaceWith(text);
});
// get the updated html content
console.log(temp.innerHTML)
为什么不使用正则表达式? :RegEx match open tags except XHTML self-contained tags
更新: msg
变量是一个元素对象,而不是字符串,这就是它被转换为[object HTMLHeadElement]
的原因(HTMLHeadElement
是指{{1}标签,我认为你的核心检查也有问题)。与上面相同,将HEAD
替换为temp
。如果您想保留原始元素内容,请按上述方式生成msg
元素,并将内容设置为temp
。
答案 1 :(得分:0)
如果您正在使用jQuery(这很好并且做所有事情)那么您可以很容易地获得href:
var string = '<a href="site/project/109#" target="_blank">href</a> text, text, <a href="/target" class="test">test</a>';
var href = $(string).attr('href');
这意味着设置锚标记的文本很简单:
$(string).text($(string).href));