LINUX.ORG.RU

elisp, regexp


0

1

Помогите с регэкспом, надо удалить из текста с JavaScript регэкспы, т.е. все / / встречающиеся в тексте. Пример:

match(/abc/)
должно остаться
match()
Первое, что приxодит в голову:
/[^/]+?/
единственное, что не ловит - экранированный слэш в составе регэкспа, т.е. в строке
xyz /\/ / b
останется
xyz / b
вместо
xyz b
а вот это
(replace-regexp-in-string 
  "/\\(\\(\\\\/\\)\\|\\([^/]+?\\)\\)/"
  "" 
  "xyz /\/ / b")
не работает, почему-то оставляя
xyz / b
зы: строку в которой делаю замену получаю из буфера:
(let ((str (thing-at-point 'line)))
            (setq str (replace-regexp-in-string ...))) 
и я не уверен в корректности третьего параметра в приведённой replace-regexp-in-string «xyz /\/ / b» - т.е. надо ли было тут экранировать слэш \ или нет чтобы получить эквивалентную получаемой из буфера строке.

Почему такие уёб#ные регэкспы в елиспе? :(

★★

Последнее исправление: Reaper (всего исправлений: 1)

т.е. надо ли было тут экранировать слэш \ или нет чтобы получить эквивалентную получаемой из буфера строке.

Конечно, надо, у тебя строка «xyz /\/ / b» - это просто xyz// / b, бекслеши в елисповых строках надо экранировать всегда. Можешь проверить message'м.

В SXEmacs ребята добавили рав-стринги, это отчасти решает проблему с этим ужасом, но в целом sxemacs ИМХО не очень юзабелен.

Интересно, зачем тебе вырезать регекспы из джаваскрипта? Может стоит написать скрипт на перле или питоне вместо трахотни с елиспом?

provaton ★★★★★
()
Ответ на: комментарий от mdraven

Спасибо, идею понял. Небольшая поправка: «/.*?[^\\]/» иначе оно /о/ не ловит (когда один символ между слэшами).

Reaper ★★
() автор топика
Ответ на: комментарий от provaton

Интересно, зачем тебе вырезать регекспы из джаваскрипта? Может стоит написать скрипт на перле или питоне вместо трахотни с елиспом?

Я свой режим пилю.

Reaper ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.