Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подобрать регулярное выражение (https://javascript.ru/forum/misc/53561-podobrat-regulyarnoe-vyrazhenie.html)

maternik 09.02.2015 08:45

Подобрать регулярное выражение
 
Всем привет!
У меня есть текст со строками вида
<Inline название="узелок" параметр="1.6" параметры="0.028, -0.02, 0"/>

Но попадаются такие
<Inline название="узелок1" параметр="1.6" параметры="0.028, -0.02, 0"></Inline>

Хочу набить массив из кусков
['название="узелок" параметр="1.6" параметры="0.028, -0.02, 0"/>', 
'название="узелок1" параметр="1.6" параметры="0.028, -0.02, 0"></Inline>']

Однако не удаётся регулярное выражение, чтобы оба вида строк брало, типа:
mas = /название=.*\n*.*(\/>)|(</Inline>)/.exec(массив[i]);

danik.js 09.02.2015 08:52

Это xml, с ним не через регулярные выражения работают, а через XML парсер:
var document = new DOMParser().parseFromString(xml, 'application/xml');
// примеры поиска узлов:
document.getElementsByName('Inline');
document.querySelectorAll('Inline[название="узелок1"]');
// доступ к атрибутам найденного узла:
node.attributes

ksa 09.02.2015 09:21

Цитата:

Сообщение от maternik
не удаётся регулярное выражение

Такое подойдет?

var str='<Inline название="узелок" параметр="1.6" параметры="0.028, -0.02, 0"/>'
str+='<Inline название="узелок1" параметр="1.7" параметры="0.029, -0.03, 0"></Inline>';
alert(str.match(/(название="[\s\S]*?)(?=((\/>)|(><)))/g));

Или тебе нужно именно такой массив
Цитата:

Сообщение от maternik
['название="узелок" параметр="1.6" параметры="0.028, -0.02, 0"/>', 'название="узелок1" параметр="1.6" параметры="0.028, -0.02, 0"></Inline>']


maternik 09.02.2015 09:24

danik.js,
Ну прост в xml-формате как раз такая соль, что пустые теги закрываются после перечисления атрибутов: <Inline/>. Вроде как гуд, но если хотелось бы сохранить структуру <Inline></Inline>, то работать придётся как с текстом, видимо?

maternik 09.02.2015 09:31

Цитата:

Сообщение от ksa (Сообщение 355790)
Такое подойдет?

var str='<Inline название="узелок" параметр="1.6" параметры="0.028, -0.02, 0"/>'
str+='<Inline название="узелок1" параметр="1.7" параметры="0.029, -0.03, 0"></Inline>';
alert(str.match(/(название="[\s\S]*?)(?=((\/>)|(><)))/g));

Спасибо! Думаю прокатит :)

ksa 09.02.2015 09:42

maternik, в xml главное теги закрывать и закрывать корректно. В твоем случае оба варианта корректны. Т.о. парсить можно без проблем... ;)

danik.js 09.02.2015 09:56

Цитата:

Сообщение от maternik
но если хотелось бы сохранить структуру

Нафига оно надо? Короче, ты х*йней страдаешь, оттого и все проблемы.

maternik 09.02.2015 12:22

Я использую библиотеку x3dom для встраивания X3D-разметки на страницу html. Для подключения внешних файлов разметки используется тег <Inline>. Однако библиотека x3dom не понимает данный тег, если отсутствует парный ему, закрывающий </Inline>, и внешняя разметка не отображается на странице. ОК?
И да, я знаю, чем страдаю :cray:

danik.js 09.02.2015 19:20

Цитата:

Сообщение от maternik
У меня есть текст со строками вида

Где он у тебя есть?
Если встраиваешь в XHTML - такой текст можно встроить. Если в HTML - нельзя.
У тебя есть причины не использовать XHTML?

В общем, ты все-таки страдаешь )


Часовой пояс GMT +3, время: 18:20.