<a href ...>...</a>
一時的に他の何かにエンコードし、他のすべてのタグを削除してから、タグを復元し<a>
ます。
// Example in javascript:
string.
replace(/<a(.*?)>/g,'\0$1\0').
replace(/<\/a>/,'\1').
replace(/<[^>]*>/,'').
replace(/\0(.*?)\0/,'<a$1>').
replace(/\1/,'</a>');
<a>
上記のコードでは、文字列に表示される可能性が非常に低いという理由だけで、タグの代わりにNUL文字とSOH文字(ASCII 0x00および0x01)を使用しています。文字列に表示されない他の文字または文字のシーケンスに自由に置き換えてください。
追加のコメントから、ブラウザで操作しているように見えます。この場合、ブラウザはすでにHTMLを解析して素敵なDOMツリーにしています。DOMメソッドを使用してツリーを解析し、必要な方法で処理します。
function simpleHTML (domNode) {
var ret = "";
if (domNode.nodeType === Node.ELEMENT_NODE) {
var children = domNode.childNodes;
for (var i=0;i<children.length;i++) {
var child = children[i];
// Filter out unwanted nodes to speed up processing.
// For example, you can ignore 'SCRIPT' nodes etc.
if (child.nodeName != 'SCRIPT') {
if (child.nodeName == 'A') {
ret += '<a href="' + child.href + '">' +
simpleHTML(child) +
'</a>';
}
else {
ret += simpleHTML(child);
}
}
}
}
else if (domNode.nodeType === Node.TEXT_NODE) {
ret += domNode.nodeValue;
}
return ret;
}
// serialize the whole document:
var simpleDocument = simpleHTML(document.body);
// serialize a div:
var simpleDiv = simpleHTML(document.getElementById('some_div'));
// filter a html formatted string:
var temp = document.createElement('DIV');
temp.innerHTML = original_string;
simple_string = simpleHTML(temp);