1

わかりました、認めます。私は正規表現が苦手です。属性 data-hover-id の値を取得しようとしています。

次のJavaScriptコードがあります:

var editText = "<span class='hover-content' data-hover-id='2' >Some text</span>";

var hoverId = -1;

// Get HoverID if it exists
var regex = /span.*data-hover-id=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?/;
var result = regex.exec(editText);
if (result.length > 1) {
  hoverId = result[1];
}

上記のコードの結果は、hoverId equals '2 (アポストロフィ 2) です。

引用符やアポストロフィなしで値 2 が必要です。この場合、正規表現は何になるでしょうか?Javascriptでこれを行うより良い方法はありますか?

4

2 に答える 2

1

次のように、正規表現をより単純にすることができます。

var re = /data-hover-id=["'](.+)["']/;
var result = re.exec(str)[1];

編集:引用符がまったくないことを説明する必要がある場合は、これを試してください:

/data-hover-id=['"]?([^\s>]+)['"]?/
于 2012-10-10T22:38:39.787 に答える
1

1 つの簡単な方法 (面倒な文字列操作を避ける):

var editText = "<span class='hover-content' data-hover-id='2' >Some text</span>",
    tmp = document.createElement('div');
tmp.innerHTML = editText;
tmp.style.display = 'none';
document.getElementsByTagName('body')[0].appendChild(tmp);
var hoverId = tmp.getElementsByTagName('span')[0].getAttribute('data-hover-id');
tmp.parentNode.removeChild(tmp);

alert(hoverId);​

JS フィドルのデモ

ただし、次のことを前提とします。

この文字列は操作されます。

私も提供します:

var editText = "<span class='hover-content' data-hover-id='2' >Some text</span>",
    parts = editText.split(/\s+/),
    hoverId = -1;

for (var i = 0, len = parts.length; i < len; i++) {
    if (parts[i].indexOf('data-hover-id') == 0) {
        hoverId = parseInt(parts[i].split('=')[1].match(/\d+/), 10)
    }
}
console.log(hoverId);​

JS フィドルのデモ

そして、より簡潔な(おそらく壊れやすい)ソリューション:

var editText = '<span class="hover-content" data-hover-id=2 >Some text</span>',
    hoverId = editText.match(/\s?data\-hover\-id=(?:['"])?(\d+)(?:['"])?/)[1] || -1;

console.log(hoverId);

単一引用符で囲まれた ( ') 属性値で動作します: JS Fiddle demo

二重引用符で囲まれた ( ") 属性値で動作します: JS Fiddle demo

引用符で囲まれていない値を操作する: JS Fiddle demo

于 2012-10-10T22:43:12.033 に答える