Эй я пытаюсь сделать, что-то довольно определенное с regex в JavaScript и моем regexp-нечто является шатким в лучшем случае Заданный вопросом, если были какие-либо профессионалы там, которые могли бы указать на меня в правильном направлении. Таким образом, у меня есть некоторый текст...
<item id="myid1">myitem1</item>
<item id="myid2">myitem2</item>
... и т.д.
И я хотел бы разделить его в массив, который читает myid1, myitem1, myid2, myitem2.... и т.д.
Никогда не будет вложенных элементов, таким образом, не будет никакой рекурсивной вложенной проблемы. Кто-либо, который в состоянии колотить это быстро?Спасибо за помощь!
Вот регулярное выражение, которое будет:
Примечание: Я поленился сопоставить здесь значение атрибута. Его нужно заключить в двойные кавычки, и не должно быть пробелов между именем атрибута и его значением.
<([^\s]+).*?id="([^"]*?)".*?>(.+?)</\1>
Выполнение регулярного выражения в javascript будет выполняться следующим образом:
search = '<item id="item1">firstItem</item><item id="item2">secondItem</item>';
regex = new RegExp(/<([^\s]+).*?id="([^"]*?)".*?>(.+?)<\/\1>/gi);
matches = search.match(regex);
results = {};
for (i in matches) {
parts = regex.exec(matches[i]);
results[parts[2]] = parts[3];
}
В конце этого результатов
будет объект, который выглядит так:
{
"item1": "firstItem",
"item2": "secondItem"
}
YMMV, если элементы
Я всегда использую этот сайт для создания своих регексов:
http://www.pagecolumn.com/tool/regtest. htm
Вот регекс, который я придумал:
(<[^>]+>)([^<]+)(<[^>]+>)
И вот результат, который страница выдает мне для 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 myArray = str.match(/(<[^>]+>)([^<]+)(<[^>]+>)/g)
if ( myArray != null) {
for ( i = 0; i < myArray.length; i++ ) {
var result = "myArray[" + i + "] = " + myArray[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) ;
}
Если ваша проблема в том, что вы не можете преобразовать строку xml в объект xml, вам придется заранее использовать парсер DOM :
var xmlString = "" ; //!! your xml string
var document = null ;
if (window.ActiveXObject) { //!! for internet explorer
document = new ActiveXObject("Microsoft.XMLDOM") ;
document.async = "false" ;
document.loadXML(xmlString) ;
} else { //!! for everything else
var parser = new DOMParser() ;
document = parser.parseFromString(xmlString,"text/xml") ;
}
Затем используйте приведенный выше сценарий.