2013-11-22 1 views
3

Я получил эту строку:Javascript Regex: Матч между ']' и '-', ERROR: неверный квантор

var str = "[RANKING] Bank President - Main office." 

Цель:

Текст между ']' и ' - ' (обратите внимание на пробелы) должно быть согласовано в Javascript.

усилию:

До сих пор

1) Я попытался

(?<=\])(.+)(?= -)/gi

Это прекрасно работает здесь: http://regexr.com?37abq, Однако в JavaScript я получаю Error : invalid quantifier в firebug.

2) Я также попытался:

\](.+) - 

Это работает очень хорошо здесь: http://www.rexfiddle.net/TzsXnjQ за исключением того, что она соответствует даже в ']' и ' - ', следовательно, делает его несущественным некоторые экстенты.

3) И добавить что-то вроде:

\]^(.+)$ - 

Код идет дремлет ...

Любое предложение высоко ценится.

+0

[JavaScript делает не поддерживайте положительные lookbehinds (? <=)] (http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript). Вот почему ваш первый вариант не работает. –

+0

@BrandonBoone, спасибо, я тоже это заметил. Любой взлом? – ErickBest

+0

Ваша третья попытка не работает, потому что вы пытаетесь сопоставить буквенный '' 'перед мета-символом начала строки ('^') и пытаетесь сопоставить' -' после конца строки ('$') метасимвол. Вы не можете сопоставить что-либо за пределами конца строки, потому что ничего не существует за пределами строки, так что регулярное выражение никогда не будет соответствовать чему-либо. – ajp15243

ответ

3

Вариант № 2 должен работать, просто получить второй индекс соответствия, например

var str = "[RANKING] Bank President - Main office." 
var matches = str.match(/\](.+?) - /); 
if (matches) { 
    var stringYouWant = matches[1]; 
} 

Вариант # 1 не работает, так как библиотека RegExp в JS не поддерживает взгляд-за

+0

Спасибо, приятель, хотя и задавался вопросом, каким образом совпадающее значение может быть только «строкой» 'Bank President', а не« ARRAY »... Возможно ли? – ErickBest

+2

@ErickBest Нет, ['String.match'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) всегда будет возвращать массив, поскольку вы могли бы используйте флаг 'g' (global) регулярного выражения, чтобы соответствовать нескольким частям вашей строки, которые соответствуют вашему регулярному выражению, и' String.match' должен был бы возвращать все согласованные фрагменты одновременно, что наиболее легко сделать с помощью массива ,Вместо того, чтобы изменять API, простейший и наиболее последовательный способ оставить массив даже для одного результата, как и ваш случай. – ajp15243

+1

Конечно, еще раз спасибо. Итак, я решил использовать свой _suggestion # 2_, смешанный с вашим стилем 'match', поэтому он выглядит так:' var stringYouWant = str.match (/\](.+?) - /) [1]; '.. Это работало, как VOODOO !. Еще раз спасибо. – ErickBest

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