Javascript 如何为span属性创建正则表达式?
好吧,我承认,我对正则表达式很差劲。我正在尝试获取属性data-hover-id的值 我有以下javascript代码:Javascript 如何为span属性创建正则表达式?,javascript,html,regex,asp.net-mvc,Javascript,Html,Regex,Asp.net Mvc,好吧,我承认,我对正则表达式很差劲。我正在尝试获取属性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=["']?((?:.(?![
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];
}
var editText=“一些文本”;
var hoverId=-1;
//获取HoverID(如果存在)
var regex=/span.*数据悬停id=[“']”吗((?:.(?![“'])?\s+(?:\s+)=|[>“]])+)[“]?/;
var result=regex.exec(editText);
如果(result.length>1){
hoverId=结果[1];
}
上面代码的结果是hoverId等于'2(撇号2)
我想要不带引号或撇号的值2。在这种情况下,正则表达式是什么?在Javascript中有更好的方法吗?您可以使正则表达式变得更简单,如:
var re = /data-hover-id=["'](.+)["']/;
var result = re.exec(str)[1];
编辑:如果您根本不需要考虑报价,请尝试以下方法:
/data-hover-id=['"]?([^\s>]+)['"]?/
一种简单的方法(避免混乱的字符串操作):
var editText=“一些文本”,
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);
警报(hoverId);
然而,鉴于:
这个字符串是可以操纵的 我还将提供:
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);
var editText=“一些文本”,
parts=editText.split(/\s+/),
hoverId=-1;
对于(变量i=0,len=parts.length;i
还有一个更简洁(尽管可能很脆弱)的解决方案:
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);
var editText='Some text',
hoverId=editText.match(/\s?数据\-hover \-id=(?:['”])?(\d+(:['”])?/)[1]| |-1;
console.log(hoverId);
使用单引号(”
)属性值:
使用双引号(“
)属性值:
处理不带引号的值:。为什么不简单地使用,或者您必须通过字符串操纵来完成?这个字符串是被操纵的。问题不是您以后是否需要操纵字符串,而是您是否必须使用字符串操纵来找到您感兴趣的值。这是可行的,但请注意,它非常特定于当前的字符串字符串。
,,“
或2
周围没有任何内容。属性引号是。data hover id=2
是合法的HTML,或者至少被大多数浏览器识别。我也不知道,但是,你知道,有些浏览器。。。(在奇怪的、向后的地方,标记仍然是大写的,并且仍然可以找到
)
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);