2016-02-03 2 views
-3

меня myObject.myFunction(), и я хочу, чтобы соответствовать myFunction в регулярном выражении Если я хочу, чтобы соответствовать все между двумя строками, выражение abc(.*)def работы;.. так var str = 'abc test def';str.match(/.(.*)def/) вернется ["abc test def", " test "], как ожидалось, но выражение .(.*)( делает не работает. Я хочу, чтобы добавить Javascript Синтаксис для моей возвышенной текст 2. Спасибо.Regex соответствует всем пунктам между точками '.' и закрывающая фигурная скобка «(»

ответ

3

но выражение. (. *) (не работает.

Поскольку . специальный символ в регулярных выражений. Буквальный ., денешься: \.

( является особенным, так что вам нужно, чтобы избежать его, а также:

var str = "/* Some function call */ myObject.myFunction() /* stuff */"; 
 
var match = str.match(/\.(.*)\(/); 
 
document.body.innerHTML = match[1];

С .* жадный подшаблон, он совпадает вплоть до последний ( на линии. Вы можете использовать отрицанием класс символов [^(]* совпасть с первым (:

var str = "/* Some function call */ myObject.myFunction() { var str = \"String()\";} /* stuff */"; 
 
document.body.innerHTML += str.match(/\.([^(]*)/)[1] + "<br/>"; 
 
document.body.innerHTML += str.match(/\.(.*)\(/)[1];

+1

OP Следует иметь в виду, что использование регулярных выражений для разбора языка программирования, как это поручение дурака. Например, '/\.(.*)\(/' будет соответствовать любым «вызовам функций» в письменной форме в комментариях или в следующем '.myFunction (« тест с круглой скобкой »(« ' – d0nut

+1

Да, не подходит для чего-то, что необходимо более чем на 90%. Обычно «достаточно хорошо» для простого подсветки синтаксиса, но даже тогда регулярное выражение является лишь частью решения. –

+0

абсолютно. Я просто хотел сделать заметку здесь, на случай, если OP пытается это сделать ничего больше, чем подсветка синтаксиса. :) Хороший ответ – d0nut

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