Проблему с помощью регулярных выражений в пользовательских скриптов для Chrome
Это может быть вопрос noob, но я пытался найти ответ здесь и на других сайтах, и я до сих пор не нашел ответа. По крайней мере, не настолько, чтобы я понял достаточно, чтобы решить проблему.
Это используется в userscript для chrome.
Я пытаюсь выбрать дату из строки. Строка-это innerHTML из тега, который мне удалось выбрать. Структура html, а также строка, выглядит примерно так: (div-это выбранный тег, поэтому все, что находится внутри-это содержание строки)
<div id="the_selected_tag">
<a href="http://www.something.com" title="something xxx">link</a>
" 2011-02-18 23:02"
<a href="http://www.somthingelse.com" title="another link">thing</a>
</div>
Если у вас есть решение, которое поможет мне выбрать дату без этого пуха, это также было бы здорово.
Javascript:
var pattern = /"s[ds:-]*"/i;
var tag = document.querySelector('div.the_selected_tag');
var date_str = tag.innerHTML.match(pattern)[0]
Когда я использую этот скрипт в качестве обычного javascript в html-документе для его тестирования, он работает отлично, но когда я устанавливаю его в качестве пользовательского кода в chrome, он не находит шаблон.
Я не могу понять, как обойти эту проблему.2 ответа:
Дамп innerHTML в консоль. Если это выглядит нормально, то начните строить регулярное выражение от более общих (
/\d+/
) до более конкретных и выводите все в консоль. Существует множество различных символов кавычек в разных кодировках, много различных типов тире.
[\d\s:-]*
это не очень хороший выбор, потому что он будет соответствовать" 1"
," "
. Я бы предпочел написать что-то как можно более конкретное:/" \d{4}-\d{2}-\d{2} \d{2}:\d{2}"/
(также
document.querySelector('div.the_selected_tag')
вернет null в вашем примере, но вы, вероятно, хотели бы напишитеclass
вместоid
)