Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Поиск текста с помощью регулярных выражений (https://javascript.ru/forum/css-html/15695-poisk-teksta-s-pomoshhyu-regulyarnykh-vyrazhenijj.html)

Worker 09.03.2011 21:35

Поиск текста с помощью регулярных выражений
 
Есть строка "math.sin()" Нужно находить только sin и только тогда когда пред ним math. а после (

(?:math\.)\w+(?:\() находит math.sin( подскажите где ошибка.

ksa 09.03.2011 22:18

Цитата:

Сообщение от Worker
Есть строка "math.sin()" Нужно находить только sin и только тогда когда пред ним math. а после (

Оно?

alert("test math.sin() sin tmp.sin math.sin".replace(/math\.sin\(/,'math.xxx('))

Worker 09.03.2011 23:22

Нет, не то. Я наверно не точно выразился. Есть много классов и один из них например math и он имеет десятки функций math.sin, math.cos, math.tang и т. д. И мне нужно чтобы находились только названия функций этих классов.

Пример:
math.sin()
math.cos()
math.Pi //константа
random.get()
random.set()

на выходе только функции
sin
cos
get
set

пример кода
reg = text.match(/(?:math\.)(\w+\s*)(?=\()/gi);
alert(reg[1])

Как можно записать этот код используя регулярные выражения?
Дело в том, что нужно передать только строку с р.в. без кода JavaScript.

Aetae 10.03.2011 00:33

Цитата:

Сообщение от Worker (Сообщение 95786)
подскажите где ошибка.

Ошибки нет, просто глобальный match не сохраняет скобки - только вхождения строки.

Убрать последнюю скобку ещё можно( /math\.\w+(?=\()/g ), но в целом не получится. Реальные задачи решаются гораздо проще.

рони 10.03.2011 00:51

Вариант
for (var str = "math.sin() math.cos() math.Pi random.get()   random.set() ", re = /(math|random)\.(\w+)[()]{2}/g, a = []; re.exec(str) != null;) a.push(RegExp.$2);
  alert(a);

monolithed 10.03.2011 01:13

Для разнообразия: :D
aray = []
while(/(math|random)\.(\w+)[()]{0,2}/g.exec('math.sin() math.cos() math.Pi random.get() random.set()') != null) {
    aray.push(RegExp.$2)
}

alert(aray);

var aray = [];
'math.sin() math.cos() math.Pi random.get() random.set()'.replace(/(math|random)\.(\w+)[()]{0,2}/g, function(a, b, c) {
        return aray.push(c)
})

alert(aray);

Aetae 10.03.2011 02:23

Ууу, набижали. Поциенту требуется одной match строкой.

Worker 10.03.2011 10:08

Цитата:

Сообщение от Aetae (Сообщение 95812)
Ошибки нет, просто глобальный match не сохраняет скобки - только вхождения строки.

Убрать последнюю скобку ещё можно( /math\.\w+(?=\()/g ), но в целом не получится. Реальные задачи решаются гораздо проще.

Вообще задача состоит в том чтобы сделать подсветку синтаксиса в InstantCMS. В ней используется SyntaxHighlighter http://alexgorbatchev.com
Есть файл ядра и файлы с описанием языков. Файл описания языка содержит список ключевых слов и регулярных выражений которые предаются в ядро. Забивать все ключевые слова напряжно, там только констант больше четырех сотен, а функций еще больше. Может кто разбирался в этом SyntaxHighlightere


Часовой пояс GMT +3, время: 15:59.