Ответ 1
Если ваша строка всегда будет иметь этот формат, регулярное выражение будет излишним:
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
К сожалению, несмотря на то, что я пытался изучать регулярное выражение хотя бы один раз в год столько лет, сколько помню, я всегда забываю, так как редко использую их. В этом году мое разрешение на новый год - не пытаться снова изучить регулярное выражение - так что в этом году, чтобы спасти меня от слез, я отдам его Stack Overflow. (Последний ремикс на Рождество).
Я хочу передать строку в этом формате {getThis}
и вернуть строку getThis
. Может ли кто-нибудь помочь в оказании помощи в решении моего нового года?
Связанные вопросы о переполнении стека:
Если ваша строка всегда будет иметь этот формат, регулярное выражение будет излишним:
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
Try
/{(.*?)}/
Это означает, что любой символ между {и}, но не должен быть жадным - соответствует кратчайшей строке, которая заканчивается на} ( "stop" - жадный). Скобки позволяют вам извлекать согласованную часть.
Другой способ:
/{([^}]*)}/
Это соответствует любому символу, кроме a} char (другой способ не быть жадным)
/\{([^}]+)\}/
/ - 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
Этот файл работает в Textmate, и он сопоставляет все в файле CSS между фигурными скобками.
\{(\s*?.*?)*?\}
selector {.
.
matches here
including white space.
.
.}
Если вы хотите, чтобы вы могли возвращать содержимое, затем оберните его в еще один набор круглых скобок, например:
\{((\s*?.*?)*?)\}
и вы можете получить доступ к содержимому через $1.
Это также работает для функций, но я не тестировал его с вложенными фигурными скобками.
Здесь простое решение, использующее javascript, заменяет
var st = '{getThis}';
st = st.replace(/\{|\}/gi,''); // "getThis"
Как говорится в принятом ответе, исходная проблема легко решается с помощью подстроки, но с помощью replace может решить более сложные варианты использования
Если у вас есть строка типа "randomstring999 [fieldname]" Вы используете немного другой шаблон для получения имени поля
var nameAttr = "randomstring999[fieldname]";
justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"
Вы хотите использовать regex lookahead и lookbehind. Это даст вам только то, что находится внутри фигурных скобок:
(?<=\{)(.*?)(?=\})
var re = /{(.*)}/;
var m = "{helloworld}".match(re);
if (m != null)
console.log(m[0].replace(re, '$1'));
Более простой .replace(/.*{(.*)}.*/, '$1')
, к сожалению, возвращает всю строку, если регулярное выражение не совпадает. Вышеописанный фрагмент кода может более легко определить совпадение.
Попробуйте это, в соответствии с http://www.regextester.com он работает для js normaly.
([^{]*?)(?=\})
Попробуйте следующее:
/[^{\}]+(?=})/g
Например
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
вернет gskinner.com
, ssd.sd
.
Регулярное выражение для получения массивов строки с закрытыми фигурными скобками встречается в строке, а не просто нахождением первого появления.
/\{([^}]+)\}/gm
Я просмотрел другие ответы, и, по-видимому, из них не хватает жизненной логики. т.е. выбрать все между двумя КОНСЕКУРАЦИОННЫМИ скобками, но не скобки
Итак, вот мой ответ
\{([^{}]+)\}
Вы можете использовать эту рекурсию регулярного выражения, чтобы она соответствовала друг другу, даже еще один {}
(например, текст JSON):
\{([^()]|())*\}