Проблему с помощью регулярных выражений в пользовательских скриптов для 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 2

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)

Это гораздо более вероятно, что тег.innerHTML не содержит того, что вы думаете, что он содержит.