2013-11-17 5 views
3

Я создаю парсер .LRC-файлов для JavaScript, и я попал в ловушку. У меня есть следующий код:JavaScript RegEx не соответствует [

var getTimecodes = new RegExp("\[[0-9]{2}:[0-9]{2}\.[0-9]{2}\]", "g"); 
var testLine = "[00:25.03][00:38.86][03:36.98][03:50.64]but man you should've seen him"; 
var timecodes = testLine.match(getTimecodes); 
var lineText = testLine.replace(getTimecodes, ""); 

console.log(timecodes); 
console.log(lineText); 

который согласно моему пониманию RegEx и нескольких полигонах RegEx, в том числе один, полностью написанный на JavaScript, я должен получать следующие результаты:

[» [00: 25,03]», "[00: 38,86]", "[03: 36,98]", "[03: 50,64]"]

, но человек, которого вы должны были видеть его

Вместо Я получение следующий вывод:

[ "00: 25,03]", "00: 38.86]", "03: 36.98]", "03: 50.64]"]

[[[[, но человек вы должны были его видеть

Может кто-нибудь пролить свет на это, пожалуйста? Я, вероятно, сделал что-то немой, но я просто не могу разобраться, что это такое ...

Спасибо, YM

ответ

5

Использование двойной \\ в RegExp конструктору:

var getTimecodes = new RegExp("\\[[0-9]{2}:[0-9]{2}\\.[0-9]{2}\\]", "g"); 

или просто:

var getTimecodes = /\[[0-9]{2}:[0-9]{2}\.[0-9]{2}\]/g; 

Причина: Поскольку RegExp constructor принимает струне fore String требуется одно ускользающее, а двигатели регулярных выражений нуждаются во втором ускорении.

+0

Ах, дерьмо, теперь я чувствую себя немой. Должно быть, я действительно устал, учитывая, что я только что исправил эту ту же ошибку в другом месте за 30 минут до публикации. –

+0

В вашем втором примере интересен какой-то особый синтаксис, который JavaScript имеет специально для Regex? Или это просто голая нить или что-то еще? –

Смежные вопросы