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

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


Смежные вопросы по переполнению стека:

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

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

, но, к сожалению, На момент написания этой статьи он поддерживается только в последних версиях Firefox (32 и выше). Его можно просто использовать следующим образом:

/{(.*?)}/

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

Другим способом было бы

/{([^}]*)}/

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

/{([^}] )}/

/        - 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

Попробуйте:

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

Например,

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

вернет gskinner.com, ssd.sd Глядя на вывод

Вот простое решение с использованием javascript replace

var st = '{getThis}';

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

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

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

var nameAttr = "randomstring999[fieldname]";

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

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

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


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

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

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

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

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

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

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

Ссылки на категории персонажей:

let path = "/{id}/{name}/{age}";
const paramsPattern = /[^{}] (?=})/g;
let extractParams = path.match(paramsPattern);
console.log("extractParams", extractParams) // prints all the names between {} = ["id", "name", "age"]
var re = /{(.*)}/;
var m = "{helloworld}".match(re);
if (m != null)
    console.log(m[0].replace(re, '$1'));

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

Попробуйте, в соответствии с Простое и надежное решение с использованием шаблона модуля. Это включает исправление для IE, где . Мне нужно предупредить пользователей о несохраненных изменениях, прежде чем они уйдут) страница (довольно распространенная проблема). js нормой.

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

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

 /{([^}] )}/gm 

Я изучил другие ответы, и мне кажется, что в них отсутствует жизненная логика. то есть, выбирайте все в двух ЗАКЛЮЧИТЕЛЬНЫХ скобках, но НЕ в скобках

, поэтому, вот мой ответ

{([^{}] )}

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

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