2010-09-06 1 views
0

Вот строка, которую я могу иметь:RegEx: Найти слово после буквы, но не включает в себя письмо в результате

(MyStringIsOneWholeWord *) 

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

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

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

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


EDIT

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

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

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

ответ

2

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

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

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


Чтобы обойти эту проблему, я предлагаю вам read the documentation. Эта часть здесь:

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

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

+0

Ни один из них работает для меня, к сожалению, он не будет даже делать то, что он делал раньше. :/ – Joshua

+0

@Joshua См. Мой обновленный ответ – NullUserException

+0

Это все еще не работает для меня, но теперь вы указали, что строка может что-то с ней делать. Это фактически строка, не уверен, повлияет ли она на нее: '(MyStringIsOneWholeWord *)'. – Joshua

0

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

захват StringIsOneWholeWord в $ 1:

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

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

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

улов MyStringIsOneWholeWord * в долл. США:

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

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

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

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

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

+0

К сожалению, я не думаю, что OP может использовать любые из этих обходных решений. Интересная ссылка. – NullUserException

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