Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.03.2011, 21:35
Новичок на форуме
Отправить личное сообщение для Worker Посмотреть профиль Найти все сообщения от Worker
 
Регистрация: 09.03.2011
Сообщений: 3

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

(?:math\.)\w+(?:\() находит math.sin( подскажите где ошибка.
Ответить с цитированием
  #2 (permalink)  
Старый 09.03.2011, 22:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

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

alert("test math.sin() sin tmp.sin math.sin".replace(/math\.sin\(/,'math.xxx('))
Ответить с цитированием
  #3 (permalink)  
Старый 09.03.2011, 23:22
Новичок на форуме
Отправить личное сообщение для Worker Посмотреть профиль Найти все сообщения от Worker
 
Регистрация: 09.03.2011
Сообщений: 3

Нет, не то. Я наверно не точно выразился. Есть много классов и один из них например 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.
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2011, 00:33
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

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

Убрать последнюю скобку ещё можно( /math\.\w+(?=\()/g ), но в целом не получится. Реальные задачи решаются гораздо проще.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 10.03.2011, 00:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Вариант
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);

Последний раз редактировалось рони, 10.03.2011 в 00:56. Причина: убрал Pi из выходного массива
Ответить с цитированием
  #6 (permalink)  
Старый 10.03.2011, 01:13
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Для разнообразия:
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);
Ответить с цитированием
  #7 (permalink)  
Старый 10.03.2011, 02:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Ууу, набижали. Поциенту требуется одной match строкой.
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 10.03.2011, 10:08
Новичок на форуме
Отправить личное сообщение для Worker Посмотреть профиль Найти все сообщения от Worker
 
Регистрация: 09.03.2011
Сообщений: 3

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

Убрать последнюю скобку ещё можно( /math\.\w+(?=\()/g ), но в целом не получится. Реальные задачи решаются гораздо проще.
Вообще задача состоит в том чтобы сделать подсветку синтаксиса в InstantCMS. В ней используется SyntaxHighlighter http://alexgorbatchev.com
Есть файл ядра и файлы с описанием языков. Файл описания языка содержит список ключевых слов и регулярных выражений которые предаются в ядро. Забивать все ключевые слова напряжно, там только констант больше четырех сотен, а функций еще больше. Может кто разбирался в этом SyntaxHighlightere
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание фильтра базы ссылок с помощью регулярных выражений SvetozarPNZ Events/DOM/Window 8 28.10.2010 13:15
Поиск текста в блоке со скроллингом lukingnu Элементы интерфейса 0 05.08.2010 22:54
Поиск русских слов с помощью \b не проходит Jury Общие вопросы Javascript 2 18.03.2010 12:05
Тестер регулярных выражений Riim Ваши сайты и скрипты 9 07.03.2010 09:21
Изменить таг с помощью регулярных выражений alexKniaz Общие вопросы Javascript 1 28.10.2008 17:38