很不幸,我已经尝试过至少一年学习正则表达式,但由于使用频率太低而总是忘记。今年我的新年决心是不再尝试学习正则表达式 - 所以今年为了拯救我免受痛苦,我会向 Stack Overflow 寻求帮助。(去年圣诞混音)。
我想传入一个这样的字符串{getThis}
,并返回字符串getThis
。 有谁可以帮助我遵守我的新年决心吗?
相关问题:
很不幸,我已经尝试过至少一年学习正则表达式,但由于使用频率太低而总是忘记。今年我的新年决心是不再尝试学习正则表达式 - 所以今年为了拯救我免受痛苦,我会向 Stack Overflow 寻求帮助。(去年圣诞混音)。
我想传入一个这样的字符串{getThis}
,并返回字符串getThis
。 有谁可以帮助我遵守我的新年决心吗?
相关问题:
尝试一下
/{(.*?)}/
这意味着匹配 { 和 } 之间的任何字符,但不贪心 - 匹配以 } 结尾的最短字符串(? 阻止 * 贪心)。括号使您可以提取匹配的部分。
另一种方法是
/{([^}]*)}/
这个正则表达式匹配除了 } 字符之外的任何字符(这是另一种非贪婪匹配的方式)。
/\{([^}]+)\}/
/ - 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
如果你的字符串始终保持这种格式,使用正则表达式会过于复杂:
>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"
substring(1, g.length-1)
的意思是从(紧挨着第一个 {
的后面)第一个字符开始,一直取到(但不包括)字符串长度减一的字符。这个方法适用的原因是位置是基于零的,即g.length-1
是最后一个位置。/{([^}]*)}/
;如果你想只匹配花括号之间至少有一个字符的情况,请使用/{([^}]+)}/
。其中:
/
:开始正则表达式模式{
:一个字面意义上的花括号(
:开始捕获[
:开始定义要捕获的字符类^}
:“除了}
以外的任何东西”]
:好的,那就是我们整个类定义了*
:与我们刚刚定义的类匹配的任意数量的字符)
:完成捕获}
:紧接着我们捕获的是一个字面意义上的花括号/
:结束正则表达式模式试试这个:
/[^{\}]+(?=})/g
例如
Welcome to RegExr v2.1 by #{gskinner.com}, #{ssd.sd} hosted by Media Temple!
将返回gskinner.com
,ssd.sd
。
\}
吗? - Uzair Ali}
结尾的任何组,即使它不以{
开头。 - Ahmad IbrahimERE
,那么你可以这样做:echo 'apple{ _orange_}}}}}{}}\0304\0226{{{}} tree' | mawk '1; gsub("[^}{]+", " | \"&\" | ")^_'
:::::::::::: :::::::::::::: ::::::::::: apple{ _orange_}}}}}{}}Ė{{{}} tree
::::::::::::::::::: :::::::::::::: :::::::::::::::::::: : ::::::::
| "apple" | { | " _orange_" | }}}}}{}} | "Ė" | {{{}} | " tree" |
确保它只获取除了大括号之外的内容。 - RARE Kpop Manifesto试一试
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"]
这里有一个使用 JavaScript replace 的简单解决方案
var st = '{getThis}';
st = st.replace(/\{|\}/gi,''); // "getThis"
正如上面所接受的答案指出的那样,最初的问题可以使用substring轻松解决,但是使用replace可以解决更复杂的用例。
如果您有一个字符串,例如“randomstring999[fieldname]”,则可以使用稍微不同的模式来获取fieldname。
var nameAttr = "randomstring999[fieldname]";
var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"
这个可以在Textmate中工作,它匹配CSS文件中花括号之间的所有内容。
\{(\s*?.*?)*?\}
选择器 {
.
.
匹配这里
包括空格
.
.
}
如果您想进一步能够返回内容,则可以像这样再将其全部包装在一个括号中:
\{((\s*?.*?)*?)\}
你可以通过 $1 访问内容。
对于函数也适用,但我尚未测试嵌套花括号的情况。
(?<=\{)(.*?)(?=\})
\{([^{}]+)\}
下面的正则表达式可以匹配任何字符,即使在中间有多个闭合大括号:
\{([\s\S]*)\}
示例:
{
"foo": {
"bar": 1,
"baz": 1,
}
}
str.replace('{','').replace('}','').trim()
。 - lost-and-found