2009-09-29 3 views
21

Мне нужно вернуть только текст, содержащийся в квадратных скобках в строке. У меня есть следующее регулярное выражение, но это также возвращает квадратные скобки:Javascript - строка возврата между квадратными скобками

var matched = mystring.match("\\[.*]"); 

Строка будет всегда содержать только один набор квадратных скобок, например:

Some text with [some important info] 

Я хочу соответствовать, чтобы содержать «некоторые важные info ', а не «[какая-то важная информация]», которую я сейчас получаю.

ответ

58

Используйте группировку. Я добавил ?, чтобы сделать совпадение «неровным», так как это, вероятно, то, что вы хотите.

var matches = mystring.match(/\[(.*?)\]/); 

if (matches) { 
    var submatch = matches[1]; 
} 
2

ли вы попробовать захватив скобки:

("\\[(.*)]"); 

Это должно вернуть шаблон в квадратных скобках в качестве захваченного матча в возвращаемом массиве

0

Вы не можете. Javascript не поддерживает lookbehinds.

Вам придется либо использовать группу захвата, либо обрезать скобки.

Кстати, вы, вероятно, не хотите жадного .* в своем регулярном выражении. Попробуйте это:

"\\[.*?]" 

или лучше, это:

"\\[[^\\]]*]" 
9

Поскольку javascript не поддерживает захваты, вы должны взломать его. Рассмотрим эту альтернативу, которая использует противоположный подход. Вместо того, чтобы захватить то, что находится внутри скобок, удалите то, что находится вне их. Поскольку всегда будет только один набор скобок, он должен работать нормально. Обычно я использую этот метод для удаления начальных и конечных пробелов.

mystring.replace(/(^.*\[|\].*$)/g, ''); 
+0

Его добавление) в конце, если после него появляется новая строка. –

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