2

我正在寻找一个 RegExp 以在某个关键字之后停止匹配。

这是我的输入:
blabl

文本
a 1,40 文本b 3.50
文本c 6,90

blabal 2 3
ddd 3 jj d

关键文本文本
2,30 4,70 5,90

我要匹配的内容:
blabl

文本a 1,40文本 b 3.50 文本c 6,90


blabal 2 3
ddd 3 jj d

关键文本文本
2,30 4,70 5,90

我的 RegExp 目前看起来像
[\d]{1,2}[.,][\d]{2}

我试图解决的问题
[\d]{1,2}[.,][\d]{2}(?=key)

所以我一直在寻找这样的东西:(
我想要匹配的)(任何东西)(关键字)

我尝试了以下正则表达式:
([\d]{1,2}[.,][\d]{2}(.|\n)+(?=key))
但现在它匹配:

文本a 1,40 文本b 3.50文本c 6,90


blabal 2 3
ddd 3 jj d

关键文本文本
2,30 4,70 5,90

我读到了非捕获组,这似乎解决了我的问题。所以我尝试了:
([\d]{1,2}[.,][\d]{2}(?>(.|\n)+)(?=key))
但这根本不匹配任何东西.

我觉得我快到了,但我真的需要一些帮助。任何我所缺少的想法都值得赞赏。如果您对我的问题有任何疑问,请随时提问。

提前感谢您的时间和精力。

4

1 回答 1

1

您可以使用

/\d+[,.]\d+(?=[\s\S]*key)/g

请参阅正则表达式演示

细节

  • \d+- 1+ 位数
  • [,.]- 一个,.
  • \d+- 1+ 位数
  • (?=[\s\S]*key)- 一个积极的前瞻,要求任何 0+ 字符后跟紧跟key在最后 1+ 位匹配后的右侧的单词。

JS 演示:

var s = "blabl\n\ntexta 1,40\ntextb 3.50\ntextc 6,90\n\nblabal 2 3\nddd 3 jj d \n\nkey textd textf\n2,30 4,70 5,90";
var rx = /\d+[,.]\d+(?=[\s\S]*key)/g;
console.log(s.match(rx));

于 2019-01-10T16:29:06.997 回答