2015-09-17 3 views
1

Мне нужно регулярное выражение, чтобы преобразовать строку {somestr} в :somestr, но мне нужно заменить только первое и последнее вхождения фигурных скобок, так как если есть в середине строки - его не следует удалять.JavaScript RegEx - заменить первое и последнее вхождение символа

До сих пор я пытался:

поступающей строка var path = '/claims/{id}'

var pathWithoutBraces = path.replace("\{", ":").replace("\}", "") 

Выход /claims/:id что и следовало ожидать, но все же он заменит все дальнейшие вхождения во всей строке

+0

Я обновил исходный вопрос –

+0

Грубо говоря, мне нужна строка '/ Claim/{{id}}' to '/ Claim /: {id}' ' –

ответ

0

Вы можете использовать следующие, чтобы заменить первый и последний { и }

var s='/claims/{abc{de}}f}'; 
 

 
document.write(s.replace(/{(.*)}/,':$1'));

1

Это должно заменить только первые и последние брекеты:

str.replace(/({)(.*)(})/, ':$2');

0

Как о: /({)([}\w]+)(})/? См. https://regex101.com/r/pW4fU7/2

Это потребует и фиксирует фигурные скобки открытия и закрытия, а также будет захватывать слова (и закрывать фигурные скобки) между ними. Вот фрагмент для примера:

var path = '/claims/{id}'; 
 
document.write(path.replace(/({)([}\w]+)(})/,':$2'));

Обратите внимание, что вам может понадобиться добавить к классу символов, в зависимости от фактических условий. Возможно, вы должны добавить больше примеров.

0

Регулярное выражение, которое должно делать то, что вам нужно, это выглядит следующим образом: /^[^{]*(?:{(.*)})[^}]*$/

Тест строки Я использовал, чтобы подтвердить, если это будет работать в starting {{ The test string } here } and here } ends

Захват группы в середине этого регулярного выражения ((.*)) затем фиксирует следующий текст из этой тестовой строки: { The test string } here } and here

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