регулярное выражение, которое выбирает только заглавную букву из другого регулярного выражения - PullRequest
0 голосов
/ 11 августа 2010

У меня есть такой тип текста:

!D este caro
1 C este descgiderea
C1 este alta deschidere
Deschiderea de 1C este cu
2C
2D
3 D
1NT
2D
123456P

Это простое регулярное выражение:

/([0-9][CDHS])/g 

выбирает «1C», «2C», «2D», «2D» (цифра, за которой сразу следует [CDHS], в любом месте текста).

То, что я хочу, это выбрать только букву из последовательностей выше (из «1C» -> только C, из «2D» только D и т. Д.). Как мне это сделать с помощью регулярного выражения?

le: Хотя метод Боло действительно работает в RegExr, в Jquery кажется, что это не так: (

Вот код:

$(document).ready(function()
      {
                 var de_inlocuit = [/!C/gi, /!D/gi,/!H/gi,/!S/gi,/(?<=[0-9])[CDHS]/g];
       var replace = ['<img src="/sites/default/files/c.gif"/>', '<img src="/sites/default/files/d.gif"/>','<img src="/sites/default/files/h.gif"/>','<img src="/sites/default/files/s.gif"/>','test' ];
       //<img src="/sites/default/files/c.gif"/>
      var i=0;
      for (i=0; i < de_inlocuit.length; i++)
       {
        $('body table tr td').replaceText( de_inlocuit[i], replace[i] );
       } 

      });

Поведение нормальное, если я удаляю /(?<=[0-9])[CDHS]/g, но, поскольку он был вставлен в код, он даже не заменяет другое (несомненно) рабочее регулярное выражение.

Ответы [ 3 ]

1 голос
/ 11 августа 2010

Чтобы использовать группы захвата, как с этим регулярным выражением:

/([0-9])([CDHS])/g

... просто вставьте ссылку на группу с соответствующей нумерацией в строку замены, например:

"rank=$1, suit=$2"

Регулярные выражения JavaScript не поддерживают вид сзади, поэтому такой подход не будет работать. Причина, по которой решение @ Bolo работает в RegExr, заключается в том, что это приложение Flex . Попробуйте его в JavaScript-тестере, например , , и вы получите более релевантные результаты.

Adobe объявляет о своих регулярных выражениях ActionScript как совместимых с JavaScript, с идентичным списком поддерживаемых функций, но на самом деле они гораздо более мощные, благодаря библиотеке PCRE . Поэтому для тестирования своих регулярных выражений JS используйте тестер JavaScript , а не инструмент Flex, такой как RegExr или RyanSwanson.com .

1 голос
/ 11 августа 2010

Снимите цифру с группы захвата:

/[0-9]([CDHS])/g

Кстати, оригинальный шаблон не соответствует строкам, в которых между буквой и цифрой есть пробел.Вы можете разрешить дополнительное пространство с:

/[0-9]\s*([CDHS])/g
0 голосов
/ 11 августа 2010

Первый вариант: используйте позитивный взгляд за спиной :

/(?<=[0-9])[CDHS]/g

Второй вариант: используйте группу захвата (как указано в ответе Эйлин):

/[0-9]([CDHS])/g

Во втором случае, однако, вы должны взять содержимое группы захвата 1 st вместо всего совпадения (т.е. группа № 1 вместо группы № 0). Как это сделать, зависит от языка программирования, который вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...