Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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:Regex从字符串中获取值_Javascript_Regex - Fatal编程技术网

Javascript:Regex从字符串中获取值

Javascript:Regex从字符串中获取值,javascript,regex,Javascript,Regex,我不擅长正则表达式,所以如果我将下面的字符串传递到someFunction(str)中,需要一些帮助 换句话说,数组的第一部分是标记名,其他部分是其属性 谢谢 您可以尝试以下方法: /([a-z]+)="([a-z0-9%]+)"/g 这是快速和肮脏的,虽然,不是很有弹性的变化。。。更“盲目”: 后一个将匹配所有不在=前面的=,然后忽略=并匹配之间的内容“这是我处理它的方式: var str = '<table width="100%" border="0" cellspacing="2

我不擅长正则表达式,所以如果我将下面的字符串传递到someFunction(str)中,需要一些帮助

换句话说,数组的第一部分是标记名,其他部分是其属性

谢谢

您可以尝试以下方法:

/([a-z]+)="([a-z0-9%]+)"/g
这是快速和肮脏的,虽然,不是很有弹性的变化。。。更“盲目”:


后一个将匹配所有不在
=
前面的
=
,然后忽略
=
并匹配
之间的内容“

这是我处理它的方式:

var str = '<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">'
var arySplits = str.split(' ');
var aryFinalVals = new Array();

for (var i = 0; i < arySplits.length; i++) {
    var arySubSplits = arySplits[i].split('=');
    aryFinalVals[arySubSplits[0].replace(/</, '')] = (arySubSplits[1]) ? arySubSplits[1].replace(/"/g, '').replace(/>/, '') : '';
}
var str=''
var aryspits=str.split(“”);
var aryFinalVals=新数组();
对于(变量i=0;iaryFinalVals[ArySublits[0]。替换(/如果您只想将字符串转换为DOM对象,则应该能够使用innerHTML调用浏览器的HTML解析器:

var strToObj = function(str) {
    var el = document.createElement('div');
    el.innerHTML = str;
    return el.childNodes[0];
}
document.body.appendChild(strToObj('<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">'))
var strtobj=函数(str){
var el=document.createElement('div');
el.innerHTML=str;
返回el.childNodes[0];
}
文件.正文.附件(strtobj(“”))

快速而肮脏的概念验证:

var input = '<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">';
var properties = {};
var tempNode = document.createElement("div");
tempNode.innerHTML = input;

for(var p in tempNode.firstChild.attributes){
    if( tempNode.firstChild.attributes.hasOwnProperty(p) ){
        properties[tempNode.firstChild.attributes[p].name] = tempNode.firstChild.attributes[p].value;
    }
}
var输入=”;
var属性={};
var tempNode=document.createElement(“div”);
tempNode.innerHTML=输入;
for(tempNode.firstChild.attributes中的var p){
if(tempNode.firstChild.attributes.hasOwnProperty(p)){
属性[tempNode.firstChild.attributes[p].name]=tempNode.firstChild.attributes[p].value;
}
}

它还没有完全测试过,并且做了很多假设,但我希望它能给你一个想法。

如果你可以将所讨论的元素作为DOM对象访问,那么就使用它,而不是使用它的字符串表示并试图解析它。我没有,我只有上面的字符串,我这样做的原因是为了将它转换为DOM对象ject…@nobody,close,但不获取标记名…您可以使用单独的正则表达式获取标记名,如下所示:
/不允许使用innerHTML:(在这里有意义,但是如何获取标记名呢?
var str = '<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">'
var arySplits = str.split(' ');
var aryFinalVals = new Array();

for (var i = 0; i < arySplits.length; i++) {
    var arySubSplits = arySplits[i].split('=');
    aryFinalVals[arySubSplits[0].replace(/</, '')] = (arySubSplits[1]) ? arySubSplits[1].replace(/"/g, '').replace(/>/, '') : '';
}
var strToObj = function(str) {
    var el = document.createElement('div');
    el.innerHTML = str;
    return el.childNodes[0];
}
document.body.appendChild(strToObj('<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">'))
var input = '<table width="100%" border="0" cellspacing="2" cellpadding="2" bgcolor="red">';
var properties = {};
var tempNode = document.createElement("div");
tempNode.innerHTML = input;

for(var p in tempNode.firstChild.attributes){
    if( tempNode.firstChild.attributes.hasOwnProperty(p) ){
        properties[tempNode.firstChild.attributes[p].name] = tempNode.firstChild.attributes[p].value;
    }
}