Как убрать число в скобках в конце строки с помощью регулярного выражения - PullRequest
2 голосов
/ 19 декабря 2010

Ищем рекурсивную функцию, которая берет строку и удаляет окончание '[x]'. Например, «abc [1] [3]» должно быть «abc [1]». Строка также может быть «abc [1] [5] [2]» и должна быть «abc [1] [5]».

Я пытаюсь str.replace(/[\\\[\d\\\]]$/, ''), но он заменяет только последнюю закрывающую скобку и игнорирует все остальное.

Есть идеи?

Ответы [ 5 ]

6 голосов
/ 19 декабря 2010

Вам не нужны внешние скобки. Попробуйте: str.replace(/\[\d\]$/, '');

2 голосов
/ 19 декабря 2010

Если гарантируется, что строка всегда содержит [number], вы можете просто использовать substring и lastIndexOf:

str = str.substring(0, str.lastIndexOf('['));

Обновление: Или просто добавьте тест:

var index = str.lastIndexOf('[');
if(index > -1) {
    str = str.substring(0,index);
}
0 голосов
/ 19 декабря 2010

/(.*)([\[].*[\]]\Z)/ должен сделать это, вам нужно будет сделать это с помощью метода match, и он предоставит две группы в массиве, одна с необходимой строкой, а другая с окончанием в ней.

0 голосов
/ 19 декабря 2010

\[\d+\]([^]]*)$ работает в Python и должен работать в Javascript. Это учитывает конечные биты после [x], которые остаются позади. Я считаю, что именно поэтому вы не ожидали ожидаемых результатов, потому что вы оставили позади пропуски. Также обратите внимание, что я изменил регулярное выражение, чтобы x было любым числом цифр - если это не то, что вы хотите, удалите +.

Вот код:

import re
s = 'abc [1] [5] [2]'
while True:
  new_s = re.sub(r'\[\d+\]([^]]*)$', r'\1', s)
  if new_s == s:
    break
  s = new_s
  print s

и вывод:

abc [1] [5] 
abc [1]  
abc   
0 голосов
/ 19 декабря 2010
\[\d+\]$

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

Я говорю "должен", потому что я все еще не настолько опытен в regex, как хотелось бы, но в regexr (изящное маленькое приложение AIR для проверки регулярных выражений) это, похоже, работает.

EDIT:

На всякий случай, если кто-то захочет поиграть с regexr, он находится на http://gskinner.com/RegExr/desktop/. Я не имею к нему никакого отношения, я просто думаю, что это хороший инструмент для использования.

...