Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为span属性创建正则表达式?_Javascript_Html_Regex_Asp.net Mvc - Fatal编程技术网

Javascript 如何为span属性创建正则表达式?

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=["']?((?:.(?![

好吧,我承认,我对正则表达式很差劲。我正在尝试获取属性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];
}
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);