Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
正则表达式查找标记id和内容JavaScript_Javascript_Regex_Elements - Fatal编程技术网

正则表达式查找标记id和内容JavaScript

正则表达式查找标记id和内容JavaScript,javascript,regex,elements,Javascript,Regex,Elements,嘿,我正试图在javascript中对regex做一些非常具体的事情,我的regexp-foo充其量是shakey。我想知道是否有专业人士可以为我指出正确的方向。所以我有一些文字 <item id="myid1">myitem1</item> <item id="myid2">myitem2</item> myitem1 我的项目2 …等等 我想把它剥离成一个数组 myid1、myitem1、myid2、myitem2等 永远不会有嵌套元素,因

嘿,我正试图在javascript中对regex做一些非常具体的事情,我的regexp-foo充其量是shakey。我想知道是否有专业人士可以为我指出正确的方向。所以我有一些文字

<item id="myid1">myitem1</item>
<item id="myid2">myitem2</item>
myitem1
我的项目2
…等等

我想把它剥离成一个数组 myid1、myitem1、myid2、myitem2等

永远不会有嵌套元素,因此不存在递归嵌套问题。有人能很快解决这个问题吗?
谢谢你的帮助

我总是使用此网站来构建我的正则表达式:

这是我提出的正则表达式:

(<[^>]+>)([^<]+)(<[^>]+>)
(]+>)([^)
这是页面为JavaScript提供的结果

使用RegExp对象:

var str = "<item id="myid1">myitem1</item><item id="myid2">myitem2</item><ssdad<sdasda><>dfsf";
var re = new RegExp("(<[^>]+>)([^<]+)(<[^>]+>)", "g");
var myArray = str.match(re);
var str=“myitem1myitem2”([^)”,“g”); var myArray=str.match(re); 使用文字:

var myArray = str.match(/(<[^>]+>)([^<]+)(<[^>]+>)/g)

if ( myArray != null) {
    for ( i = 0; i < myArray.length; i++ ) { 
        var result = "myArray[" + i + "] = " + myArray[i];
    }
}
var myArray=str.match(/(]+>)([^)/g)
if(myArray!=null){
对于(i=0;i
这是一个xml字符串。在我看来,xml解析器似乎最适合此类任务。请执行以下操作:

var items = document.getElementsByTagName("item") ; //<> use the parent element if document is not
var dataArray = [ ] ;

for(var n = 0 ; n < items.length ; n++) {

     var id = items[n].id ;
     var text = items[n].childNodes[0] ;

         dataArray.push(id,text) ;

}

然后使用上面的脚本。

下面是一个正则表达式,它将:

  • 匹配起始和结束标记元素名称
  • 提取id属性的值
  • 提取标记的内部html内容
注: 我懒得在这里匹配属性值。它需要用双引号括起来,属性名和属性值之间不需要空格

<([^\s]+).*?id="([^"]*?)".*?>(.+?)</\1>

YMMV,如果元素包含嵌套的HTML。

如果某人确实喜欢或需要使用Regex通过id获取HTML标记(如问题主题中的),他可以使用我的代码:

function GetTagByIdUsingRegex(tag,id,html) {
    return new RegExp("<" + tag + "[^>]*id[\\s]?=[\\s]?['\"]" + id + "['\"][\\s\\S]*?<\/" + tag + ">").exec(html);
}
函数GetTagByIdUsingRegex(标记、id、html){ 返回新的RegExp(“]*id[\\s]?=[\\s]?['\“]”+id+“['\“][\\s]*?”).exec(html); } 我还制作了一个按类名获取元素的示例:

function GetTagByClassUsingRegex(tag,cls,html) {
    return new RegExp("<" + tag + "[^>]*class[\\s]?=[\\s]?['\"]" + cls + "[^'\"]*['\"][\\s\\S]*?<\/" + tag + ">").exec(html);
}
函数GetTagByClassUsingRegex(标记、cls、html){ 返回新的RegExp(“]*class[\\s]?=[\\s]?['\“]”+cls+“[^'\“]*['\“][\\s]*?”).exec(html); }
您能更好地解释myitem1 myitem2…等的结构吗?或者它是一个简单的以空格分隔的字符串列表吗?使用xml解析器将是理想的解决方案,但不幸的是,我无法访问dom操作,这对这个问题来说有点过火。不过,谢谢!在我的例子中,提出了一个正则表达式模式将持续更长的时间。此外,由于您有XML字符串,您可以通过如上所述构建dom对象来访问dom。无论如何,欢迎您!太好了,谢谢!将re更改为…/]*id=[']](.*?[']>(.*?)[']>(.*?)/gi,并且似乎可以很好地工作:-)谢谢@Thomas和Chris,这个帮助人
id=myID>(.*)
它不适用于嵌套的标记。如果在div中有div,它会将第一个close标记视为表达式的结尾
{
    "item1": "firstItem",
    "item2": "secondItem"
}
function GetTagByIdUsingRegex(tag,id,html) {
    return new RegExp("<" + tag + "[^>]*id[\\s]?=[\\s]?['\"]" + id + "['\"][\\s\\S]*?<\/" + tag + ">").exec(html);
}
function GetTagByClassUsingRegex(tag,cls,html) {
    return new RegExp("<" + tag + "[^>]*class[\\s]?=[\\s]?['\"]" + cls + "[^'\"]*['\"][\\s\\S]*?<\/" + tag + ">").exec(html);
}