4

有効な HTML である場合とそうでない場合がある文字列がありますが、 Title タグを含める必要があります。
タイトルの内容を新しい内容に差し替えたい。

例 1:

lorem yada yada <title>Foo</title> ipsum yada yada  

次のようになります。

lorem yada yada <title>Bar</title> ipsum yada yada  

例 2:

lorem yada yada <title attributeName="value">Foo</title> ipsum yada yada  

次のようになります。

lorem yada yada <title attributeName="value">Bar</title> ipsum yada yada  

html を正規表現で解析したくありません - タイトルタグを置き換えるだけです...ここに私を送らないでください...

編集:多数の反対票と多くのひいきの態度の後-
私は(元の投稿で認められているように)通常、正規表現はHTMLを処理する方法ではないことを認識しています。私は自分の問題を解決するソリューションを受け入れますが、これまですべての JQuery / DOM ソリューションは機能しませんでした。「正しい」だけでは十分ではありません。

4

3 に答える 3

5

正規表現でそのようなことを確実に行うことは困難です (「すべてのケースで機能するとは限りません」を参照)。そのため、可能であれば何らかの適切なパーサーを使用することが最善です。

とはいえ、これはあなたの例でうまくいく簡単な式です:

var re = /(<title\b[^>]*>)[^<>]*(<\/title>)/i;
str = str.replace(re, "$1Bar$2");

これで処理されず、正しく機能しないもの: コメント、引用符、CDATA など。

于 2012-06-19T12:03:19.313 に答える
4
function replaceTitle( str, replacement ) {
    var tmp = document.createElement("ihatechrome");
    tmp.innerHTML = str;
    tmp.getElementsByTagName("title")[0].innerHTML = replacement;
    return tmp.innerHTML;   
}

replaceTitle( "lorem yada yada <title>Foo</title> ipsum yada yada", "Bar" );
//"lorem yada yada <title>Bar</title> ipsum yada yada"

img何らかの理由で、.が付いたタグがある場合、googlechromeはリクエストを行いますsrc。意味がありませんが、それが起こります。

編集:

これはChromeで機能するようです(画像は読み込まれません):

var doc = document.implementation.createHTMLDocument("");

doc.body.innerHTML = "<img src='/'>";

doc.body.innerHTML; //"<img src="/">"
于 2012-06-19T11:36:30.150 に答える
0

正規表現でhtmlを解析しようとしないでください(解析していないと言っていましたが、解析しています...)jQueryには、DOMにないhtmlを操作するための完全に優れたプリミティブのセットがあります。

var htmlishString = "almost <title>HTML</title>";
var $fakeDiv = jQuery('<div />');
$fakeDiv.html(htmlishString).find('title').text('Bar');
var manipulatedString = $fakeDiv.html()

http://jsfiddle.net/4kQkx/

于 2012-06-19T23:17:07.310 に答える