Регулярное выражение, чтобы получить строку между фигурными скобками "{я хочу, что между фигурными скобками}"
к сожалению, несмотря на то, что я пытался изучать регулярные выражения хотя бы один раз в год столько лет, сколько я помню, я всегда забываю, поскольку я использую их так редко. В этом году мое новогоднее решение - не пытаться снова изучать регулярное выражение -Так что в этом году, чтобы спасти меня от слез, я отдам его Stack Overflow. (Последний рождественский ремикс).
Я хочу передать строку в таком формате {getThis}
, и будет возвращена строка getThis
. Может ли кто-нибудь помочь в помощи придерживаться в Новый год?
связанные вопросы по переполнению стека:
- как можно превратить обычные кавычки (т. е.',") в кавычки LaTeX/TeX (т. е.`,`")
- регулярное выражение: чтобы вытащить подстроку между двумя тегами в строке
- регулярное выражение для замены всех n в строке, но не те, что внутри [code] [/code] tag
13 ответов:
Если ваша строка всегда будет иметь тот формат, регулярное выражение-это перебор:
>>> var g='{getThis}'; >>> g.substring(1,g.length-1) "getThis"
попробовать
/{(.*?)}/
это означает, что сопоставьте любой символ между { и }, но не жадничайте-сопоставьте самую короткую строку, которая заканчивается} (the ? перестает быть жадным). Скобки позволяют извлечь сопоставленную часть.
другой способ был бы
/{([^}]*)}/
это соответствует любому символу, кроме 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 replace
var st = '{getThis}'; st = st.replace(/\{|\}/gi,''); // "getThis"
как указано в принятом ответе выше, исходная проблема легко решается с помощью подстроки, но использование замены может решить более сложные случаи использования
Если у вас есть строка типа " randomstring999[fieldname]" Вы используете немного другой шаблон, чтобы получить имяполя
var nameAttr = "randomstring999[fieldname]"; var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"
попробуйте это:
/[^{\}]+(?=})/g
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
вернутся
gskinner.com
,ssd.sd
.
вы хотите использовать регулярное выражение lookahead и lookbehind. Это даст вам только то, что находится внутри фигурных скобок:
(?<=\{)(.*?)(?=\})
var re = /{(.*)}/; var m = "{helloworld}".match(re); if (m != null) console.log(m[0].replace(re, ''));
проще
.replace(/.*{(.*)}.*/, '')
к сожалению возвращает всю строку, если регулярное выражение не совпадает. Приведенный выше фрагмент кода может более легко обнаружить совпадение.
попробуйте это, согласно http://www.regextester.com это работает для js нормально.
([^{]*?)(?=\})
регулярное выражение для получения массивов строк с фигурными скобками, заключенными в строку, а не просто найти первое вхождение.
/\{([^}]+)\}/gm
Я просмотрел другие ответы, и жизненно важная логика, похоже, отсутствует в них . т. е., выберите все между двумя последовательными скобками, но не скобки
Итак, вот мой ответ
\{([^{}]+)\}