不幸的是,尽管在我记得的很多年里,我每年至少尝试学习一次正则表达式,但我总是忘记,因为我很少使用它们。今年我的新年决心是不再尝试学习正则表达式 -所以今年为了让我免于流泪,我会把它交给 Stack Overflow。(去年圣诞节混音)。
我想以这种格式传入一个字符串{getThis}
,并返回该字符串getThis
。任何人都可以帮助我坚持我的新年决心吗?
Stack Overflow 上的相关问题:
不幸的是,尽管在我记得的很多年里,我每年至少尝试学习一次正则表达式,但我总是忘记,因为我很少使用它们。今年我的新年决心是不再尝试学习正则表达式 -所以今年为了让我免于流泪,我会把它交给 Stack Overflow。(去年圣诞节混音)。
我想以这种格式传入一个字符串{getThis}
,并返回该字符串getThis
。任何人都可以帮助我坚持我的新年决心吗?
Stack Overflow 上的相关问题:
尝试
/{(.*?)}/
这意味着,匹配 { 和 } 之间的任何字符,但不要贪婪 - 匹配以 } 结尾的最短字符串(? 停止 * 贪婪)。括号可让您提取匹配的部分。
另一种方式是
/{([^}]*)}/
这匹配除 } 字符之外的任何字符(另一种不贪婪的方式)
/\{([^}]+)\}/
/ - 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
。
这是一个使用javascript替换的简单解决方案
var st = '{getThis}';
st = st.replace(/\{|\}/gi,''); // "getThis"
由于上面接受的答案指出原始问题很容易用子字符串解决,但使用替换可以解决更复杂的用例
如果你有一个像 "randomstring999[fieldname]" 这样的字符串,你可以使用稍微不同的模式来获取 fieldname
var nameAttr = "randomstring999[fieldname]";
var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"