regex 正则表达式-匹配大括号之间的所有字符,只要存在特定字符串

s4n0splo  于 2023-03-31  发布在  其他
关注(0)|答案(4)|浏览(314)

我有这样的段落:

"{~1.6} This is another paragraph {~1} with curly braces.{~6.8}"

我要匹配{~<int or float>}
到目前为止,我已经得到了这个正则表达式:/\{(\~(\d*\.?\d+),?)\}/g
它工作正常,但有时会在~<int or float>之前或之后出现一些其他字符,如下所示:

"{:.class ~1.6 #id} This is another paragraph {~1 .class #id} with curly braces.{:#id ~6.8}"

我不知道~<int or float>之前或之后的内容,我只知道所有内容都在花括号之间。
如何匹配每个{<some content here>},只要它至少包含一个~<int or float>出现?

x9ybnkn6

x9ybnkn61#

/{([^}]*(~\d*(?:\.\d+)?)[^}]*)}/

匹配大括号,任意数量的非大括号字符,然后匹配您感兴趣的位(波浪号和数字,可选小数点和小数位),然后可能匹配更多的非大括号字符,最后匹配右大括号。regex101
注意,在JavaScript中,大括号不需要转义,除非它包含一个有效的量词(用逗号分隔的数字或数字对,可能缺少一个数字),尽管这并没有什么坏处;波浪号根本不需要转义。

9rygscc1

9rygscc12#

你可以试试这个

/{(?=.~(\d.?\d+))([^{}]+)}/g
h22fl7wq

h22fl7wq3#

你可以在~number周围加上不包括对括号的类,像这样:

\{[^}]*(\~(\d*\.?\d+),?)[^{]*\}

示例here

3lxsmp7m

3lxsmp7m4#

要删除花括号外的所有字符,可以使用以下正则表达式:
\{[^{}]*\}
此模式将采用您的示例字符串并输出以下内容:

  • "{~1.6}{~1}{~6.8}"
  • "{:.class ~1.6 #id}{~1 .class #id}{:#id ~6.8}"

上面的模式更简单,但如果还需要忽略空大括号(即{}),则可以使用此表达式
\{[^{}]*\}(?=[^{}]*\{[^{}]*\})

相关问题