正则表达式来得到大括号之间的字符串“{我想要大括号之间}”
不幸的是,尽管我至少每年都要学习一次正则表达式,但我经常忘记,因为我很少使用它。 今年我的新年的决心是不要再尝试和学习正则表达式 – 所以今年,为了不让我流泪,我会给它堆栈溢出 。 (去年圣诞节重新混音)
我想以这种格式{getThis}
传递一个字符串,并返回字符串getThis
。 任何人都可以帮助坚持我的新年决议?
有关堆栈溢出的相关问题:
- 如何将正则引号(即“,”)转换成LaTeX / TeX引号(即“,“`')
- 正则表达式:拉出一个字符串中两个标签之间的一个子字符串
- 正则表达式来替换一个字符串中的所有\ n,但是没有那些[code] [/ code]标签里面的那些
如果你的字符串总是这样的格式,正则表达式是矫枉过正的:
>>> var g='{getThis}'; >>> g.substring(1,g.length-1) "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
这一个在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"
你想要使用正则表达式和lookbehead。 这只会给你大括号里面的东西:
(?<=\{)(.*?)(?=\})
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
我已经研究了其他的答案,并且似乎从他们身上丢失了一个重要的逻辑。 即选择两个括号之间的所有内容,而不是括号
所以,这是我的答案
\{([^{}]+)\}
你可以使用这个regex递归匹配everythin,甚至是另一个{}
(比如JSON文本):
\{([^()]|())*\}