花括号中间的字符串正则表达式

153

很不幸,我已经尝试过至少一年学习正则表达式,但由于使用频率太低而总是忘记。今年我的新年决心是不再尝试学习正则表达式 - 所以今年为了拯救我免受痛苦,我会向 Stack Overflow 寻求帮助。(去年圣诞混音)。

我想传入一个这样的字符串{getThis},并返回字符串getThis。 有谁可以帮助我遵守我的新年决心吗?


相关问题:


5
这个问题已经被加入到 Stack Overflow 正则表达式 FAQ 中的“高级 Regex-Fu”部分。 - aliteralmind
@Kobi:FAQ是一个维基页面,任何人都可以编辑它。所以去编辑吧。 - aliteralmind
在JS中,一旦我有了来自这里第一个答案的带括号的字符串,我会执行 str.replace('{','').replace('}','').trim() - lost-and-found
17个回答

5

正则表达式用于获取包含在字符串中的花括号中的字符串数组,而不仅仅是找到第一个出现的。

 /\{([^}]+)\}/gm 

4
var re = /{(.*)}/;
var m = "{helloworld}".match(re);
if (m != null)
    console.log(m[0].replace(re, '$1'));

.replace(/.*{(.*)}.*/, '$1')这个更简单的方法,如果正则表达式没有匹配到内容,会返回整个字符串。上述代码片段可以更轻松地检测到匹配。


4

3
对于多项选择,您可以使用/([^{]*?)\w(?=\})/gmi - Павло Коменда

2
您可以使用正则表达式递归来匹配两个之间的所有内容,甚至是另一个{}(例如JSON文本):
\{([^()]|())*\}

1
不错,但这只捕获嵌套括号内的内容。 - Dominic
1
不捕获内容是否包含() - Mert Mertce

2

即使是在解决某人的问题时,这也对我有所帮助。

拆分大括号({})内部的内容,其模式类似于 {'day': 1, 'count': 100}

例如:

#include <iostream> 
#include <regex> 
#include<string> 
using namespace std; 

int main() 
{ 
    //string to be searched
    string s = "{'day': 1, 'count': 100}, {'day': 2, 'count': 100}";

    // regex expression for pattern to be searched 
    regex e ("\\{[a-z':, 0-9]+\\}");
    regex_token_iterator<string::iterator> rend;

    regex_token_iterator<string::iterator> a ( s.begin(), s.end(), e );
    while (a!=rend) cout << " [" << *a++ << "]";
    cout << endl;

    return 0; 
}

输出:

[{'day': 1, 'count': 100}] [{'day': 2, 'count': 100}]

0
echo '/{id}/{name}/{age}' |
mawk NF=NF FS='(^|[}]+)(/[{]+|$)' OFS='\v'

id
  name
      age

你可以使用最平淡无奇的 ERE 轻松地将它们提取出来。


-1
你可以使用 String.slice() 方法。
let str = "{something}";
str = str.slice(1,-1) // something

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接