Regex, чтобы получить строку между фигурными фигурными скобками "{Я хочу, что между фигурными фигурными скобками}"

К сожалению, несмотря на то, что я пытался изучать регулярное выражение хотя бы один раз в год столько лет, сколько помню, я всегда забываю, так как редко использую их. В этом году мое разрешение на новый год - не пытаться снова изучить регулярное выражение - так что в этом году, чтобы спасти меня от слез, я отдам его Stack Overflow. (Последний ремикс на Рождество).

Я хочу передать строку в этом формате {getThis} и вернуть строку getThis. Может ли кто-нибудь помочь в оказании помощи в решении моего нового года?


Связанные вопросы о переполнении стека:

Ответ 1

Если ваша строка всегда будет иметь этот формат, регулярное выражение будет излишним:

>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"

Ответ 2

Try

/{(.*?)}/

Это означает, что любой символ между {и}, но не должен быть жадным - соответствует кратчайшей строке, которая заканчивается на} ( "stop" - жадный). Скобки позволяют вам извлекать согласованную часть.

Другой способ:

/{([^}]*)}/

Это соответствует любому символу, кроме a} char (другой способ не быть жадным)

Ответ 3

/\{([^}]+)\}/

/        - delimiter
\{       - opening literal brace escaped because it is a special character used for quantifiers eg {2,3}
(        - start capturing
[^}]     - character class consisting of
    ^    - not
    }    - a closing brace (no escaping necessary because special characters in a character class are different)
+        - one or more of the character class
)        - end capturing
\}       - the closing literal brace
/        - delimiter

Ответ 4

Этот файл работает в Textmate, и он сопоставляет все в файле CSS между фигурными скобками.

\{(\s*?.*?)*?\}

selector {. . matches here including white space. . .}

Если вы хотите, чтобы вы могли возвращать содержимое, затем оберните его в еще один набор круглых скобок, например:

\{((\s*?.*?)*?)\}

и вы можете получить доступ к содержимому через $1.

Это также работает для функций, но я не тестировал его с вложенными фигурными скобками.

Ответ 5

Здесь простое решение, использующее javascript, заменяет

var st = '{getThis}';

st = st.replace(/\{|\}/gi,''); // "getThis"

Как говорится в принятом ответе, исходная проблема легко решается с помощью подстроки, но с помощью replace может решить более сложные варианты использования

Если у вас есть строка типа "randomstring999 [fieldname]" Вы используете немного другой шаблон для получения имени поля

var nameAttr = "randomstring999[fieldname]";

justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"

Ответ 6

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

(?<=\{)(.*?)(?=\})

Ответ 7

var re = /{(.*)}/;
var m = "{helloworld}".match(re);
if (m != null)
    console.log(m[0].replace(re, '$1'));

Более простой .replace(/.*{(.*)}.*/, '$1'), к сожалению, возвращает всю строку, если регулярное выражение не совпадает. Вышеописанный фрагмент кода может более легко определить совпадение.

Ответ 8

Попробуйте это, в соответствии с http://www.regextester.com он работает для js normaly.

([^{]*?)(?=\})

Ответ 9

Попробуйте следующее:

/[^{\}]+(?=})/g

Например

Welcome to RegExr v2.1 by #{gskinner.com},  #{ssd.sd} hosted by Media Temple!

вернет gskinner.com, ssd.sd.

Ответ 10

Регулярное выражение для получения массивов строки с закрытыми фигурными скобками встречается в строке, а не просто нахождением первого появления.

 /\{([^}]+)\}/gm 

Ответ 11

Я просмотрел другие ответы, и, по-видимому, из них не хватает жизненной логики. т.е. выбрать все между двумя КОНСЕКУРАЦИОННЫМИ скобками, но не скобки

Итак, вот мой ответ

\{([^{}]+)\}

Ответ 12

Вы можете использовать эту рекурсию регулярного выражения, чтобы она соответствовала друг другу, даже еще один {} (например, текст JSON):

\{([^()]|())*\}