当前位置:  开发笔记 > 编程语言 > 正文

正则表达式在花括号之间获取字符串"{我想在花括号之间有什么}}"

如何解决《正则表达式在花括号之间获取字符串"{我想在花括号之间有什么}}"》经验,为你挑选了8个好方法。

不幸的是,尽管我已经多次尝试每年至少学习一次正则表达,但我总是忘记,因为我很少使用它们.今年我的新年决心是不再尝试再学习正则表达式 - 所以今年为了让我免于流泪,我会把它交给Stack Overflow.(去年圣诞节混音).

我想以这种格式传入一个字符串{getThis},并返回字符串getThis.任何人都可以帮助我坚持新的一年的决议吗?


Stack Overflow的相关问题:

如何将常规引号(即',')转换为LaTeX/TeX引号(即`',``'')

正则表达式:在字符串中的两个标记之间拉出一个子字符串

正则表达式替换字符串中的所有\n,但不包括[code] [/ code]标记内的所有\n

Paul Dixon.. 241

尝试

/{(.*?)}/

这意味着,匹配{和}之间的任何字符,但不要贪婪 - 匹配以}结尾的最短字符串(?停止*贪婪).括号允许您提取匹配的部分.

另一种方式是

/{([^}]*)}/

这匹配除了} char之外的任何字符(另一种不贪婪的方式)



1> Paul Dixon..:

尝试

/{(.*?)}/

这意味着,匹配{和}之间的任何字符,但不要贪婪 - 匹配以}结尾的最短字符串(?停止*贪婪).括号允许您提取匹配的部分.

另一种方式是

/{([^}]*)}/

这匹配除了} char之外的任何字符(另一种不贪婪的方式)


对{a} {b}不起作用只与第一个匹配
它不会捕获大括号之间的所有内容,它会捕获大括号和大括号之间的所有内容.你将如何仅仅捕获大括号内的内容?
最后添加`g`使其成为全局搜索.参见[工作实例](http://scriptular.com/#%7B%7B(../%3F)%% 7D%7D%7C%7C%7C%7Cg%7C%7C%7C%7C%5B%22hello %20%7B%7B3%7D%7D%20于是%20another%20%7B%7B3%7D%7D%22%5D)

2> meouw..:
/\{([^}]+)\}/

/        - 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


我想找到大括号是否是java regexp中的特殊字符,这有助于很多.10X.

3> Kev..:

如果你的字符串总是那种格式,那么正则表达式就是矫枉过正:

>>> var g='{getThis}';
>>> g.substring(1,g.length-1)
"getThis"


很好,但不确定这是一个正则表达式.也许他正在要求正则表达式,我来到这里是为了同样的答案......遗憾的是答案与这个问题无关.
子串化是根据您使用的语言而改变的事情之一.Javascript使索引停止,PHP获取所需最终结果的长度(除非它是否定的,在这种情况下需要删除的字符数) ,C#再次不同......好看又令人困惑.
@ baash05,如果你读完整个问题,OP甚至不想学习正则表达式,所以我认为这不是你似乎建议的学术练习.
...而且Python只有切片,IMO比其他任何东西都好:p.
我想做-1因为问题是要求**正则表达式**,我正在寻找**正则表达式**,但是接受的答案对我来说完全没用(虽然这个问题看起来非常有希望).在阅读完第一条评论后,我必须承认,如果我先回答这个问题,我可以用同样/类似的方式回答......所以最后,+1.

4> Mohamed Abo ..:

试试这个:

/[^{\}]+(?=})/g

例如

Welcome to RegExr v2.1 by #{gskinner.com},  #{ssd.sd} hosted by Media Temple!

将返回gskinner.com,ssd.sd.



5> chim..:

这是一个使用javascript替换的简单解决方案

var st = '{getThis}';

st = st.replace(/\{|\}/gi,''); // "getThis"

正如上面接受的答案指出原始问题很容易用子串解决,但使用replace可以解决更复杂的用例

如果您有一个像"randomstring999 [fieldname]"这样的字符串,您可以使用稍微不同的模式来获取fieldname

var nameAttr = "randomstring999[fieldname]";

var justName = nameAttr.replace(/.*\[|\]/gi,''); // "fieldname"



6> 小智..:

这个在Textmate中工作,它匹配大括号之间的CSS文件中的所有内容.

\{(\s*?.*?)*?\}

selector {. . matches here including white space. . .}

如果你想进一步能够返回内容,那么将它全部包装在一组括号中,如下所示:

\{((\s*?.*?)*?)\}

并且您可以通过$ 1访问内容.

这也适用于函数,但我没有使用嵌套的大括号进行测试.



7> 小智..:

你想使用正则表达式前瞻和后瞻.这将只给出花括号内的内容:

(?<=\{)(.*?)(?=\})


@ Somatik-是的,ECMAScript不支持负向前瞻和后退.

8> Hemadri Dasa..:

尝试这个

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"]

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有