regex 正则表达式与我预期的不匹配

wi3ka0sx  于 2023-08-08  发布在  其他
关注(0)|答案(4)|浏览(77)

我有这个字符串:第一个月
还有这个regex:/\S*\$\$?[^$]*\$\$?\S*/gi
我觉得应该匹配所有的短语内单或双美元符号$以及任何文字,围绕它。所以理想情况下,它应该是$xy$-plane.$f(x, y)$
但出于某种原因它匹配:$xy$-plane. The slope of each line segment is given by the value of $f(x,
有人知道我做错了什么吗?或者这里发生了什么?
我希望它匹配$xy$-plane。和$f(x,y)$但它不是

rxztt3cl

rxztt3cl1#

因为regex默认情况下采用最长的匹配,所以您必须通过添加?来告诉*“懒惰”。

\S*?\$\$?[^$]*\$\$?\S*

字符串
建议使用regexr.com:一个很好的网站,你可以在上面测试你正在使用的正则表达式
你也可以像这样简化你的正则表达式

\S*?\$[^$]*\$\S*


这是因为\S*也可以捕获“外部”$,因此$$hey$$ciao无论如何都会匹配。

ivqmmu1c

ivqmmu1c2#

也许你需要这样的smth
第一个月
这将抓取美元符号内的所有文本和周围的文本,而不是空白。

qco9c6ql

qco9c6ql3#

你会想要这样的东西:

[^\s$]*\$[^$]+\$[^\s$]*

字符串

  • [^\s$]*-匹配零个或多个非空格字符和开头美元符号前的非美元符号字符
  • \$-开头美元符号
  • [^$]+-一个或多个非美元符号
  • \$-结束美元符号
  • [^\s$]*-零个或多个非空格和非美元符号字符

https://regex101.com/r/ws0mn0/1

const str = 'Slope fields are constructed by plotting tiny line segments at various points in the $xy$-plane. The slope of each line segment is given by the value of $f(x, y)$ at that corresponding run-on-sentence$()$followed-by-another$DHF$group point. These line segments collectively form a field of slopes, hence the name "slope field." and more some-$yz$-something else';

const match = str.match(/[^\s$]*\$[^$]+\$[^\s$]*/g);

console.log(match);

jyztefdp

jyztefdp4#

将正则表达式改为/[^\s$]*\$[^$]+\$[^\s$]*/gi。它匹配您希望它根据regex101匹配的内容:

的数据

相关问题