RegEx: найти слово после буквы, но не включать букву в результате - PullRequest
0 голосов
/ 06 сентября 2010

Вот строка, которая у меня может быть:

(MyStringIsOneWholeWord *)

Я использовал следующее регулярное выражение javascript, чтобы получить текст после скобки, если он начинается с My.

/(^|\s|\()+My(\w+)/g,

Проблема в том, что он включает в себя первую скобку в результате, так как это буква / символ, который его нашел.

Как бы избавиться от скобки в результате?


РЕДАКТИРОВАТЬ

Для получения дополнительной информации я редактирую C Language javascript файл подсветки синтаксиса SHJS.

Вот все соответствующие коды для этого вопроса:

[
 /(^|\s|\()+My(\w+)/g,
 'sh_keyword',
 -1
]

Ответы [ 3 ]

2 голосов
/ 06 сентября 2010

Если бы это было просто JS, вы могли бы использовать группу захвата:

/(^|\s|\()+(My\w+)/g

Тогда получите совпадение в этой группе.Однако, похоже, что SHJS будет использовать все совпадение, что требует использования lookbehind, которое не поддерживается движком Javascript Regex.


Чтобы обойти это, я бы предложил вам прочитайте документацию .Эта часть здесь:

Как только вы определили язык, вы должны преобразовать его в формат JavaScript, используемый SHJS.Вам потребуется скрипт sh2js.pl из исходного дистрибутива SHJS.Скрипт sh2js.pl написан на Perl и требует наличия модуля Parse :: RecDescent.

Сообщает, что полученные файлы JS не предназначены для редактирования.В документах говорится, что SHJS использует тот же формат, что и подсветка исходного кода GNU, которая указана здесь .Поэтому вы должны отредактировать исходные файлы .lang (ссылка) и затем преобразовать их в .js.

1 голос
/ 06 сентября 2010

То, что вы хотите - это положительный взгляд за утверждением .К сожалению, Javascript не поддерживает их.Тем не менее, Стивен Левитан освещает это в своем блоге здесь: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

Редактировать: Обновленная статья того же автора: http://blog.stevenlevithan.com/archives/javascript-regex-lookbehind

0 голосов
/ 06 сентября 2010

Я не понимаю, что именно вы хотите захватить, но вы можете попробовать некоторые из них:

захват StringIsOneWholeWord в $ 1:

/(?:^|\s|\()+My(\w+).*\)/

захват MyStringIsOneWholeWord в $ 1:

/(?:^|\s|\()+(My\w+).*\)/

захват MyStringIsOneWholeWord * в $ 1:

/(?:^|\s|\()+(My\w+.*)\)/

захват StringIsOneWholeWord * в $ 1:

/(?:^|\s|\()+My(\w+.*)\)/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...