正则表达式查找标记id和内容JavaScript
嘿,我正试图在javascript中对regex做一些非常具体的事情,我的regexp-foo充其量是shakey。我想知道是否有专业人士可以为我指出正确的方向。所以我有一些文字正则表达式查找标记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等 永远不会有嵌套元素,因
<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);
}