RegExp在特定字符串后停止匹配

时间:2019-01-10 16:13:20

标签: regex xregexp

我正在寻找某个特定的关键字后停止匹配的RegExp。

这是我的输入内容
blabl

texta 1,40
textb 3.50
textc 6,90

blabla 2 3
ddd 3 jj d

短信textf
2,30 4,70 5,90

我要匹配的内容:
blabl

texta 1,40
textb 3.50
textc 6,90

blabla 2 3
ddd 3 jj d

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

我的RegExp当前是什么样的
[\ d] {1,2} [。,] [\ d] {2}

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

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

我尝试了以下RegExp:
([\ d] {1,2} [。,] [\ d] {2}(。| \ n)+(?= key))
但现在它匹配了:

texta 1,40
textb 3.50
textc 6,90

blabla 2 3
ddd 3 jj d

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

我读到了一些非俘虏团体,这似乎可以解决我的问题。所以我尝试了:
([\ d] {1,2} [。,] [\ d] {2}(?>(。| \ n)+)(?= key))
但这根本不符合任何条件。

我觉得我快要走了,但是我真的可以帮些忙。任何想法,我想念的赞赏。如果您对我的问题有任何疑问,请随时提出。

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

1 个答案:

答案 0 :(得分:1)

您可以使用

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

请参见regex demo

详细信息

  • \d+-1个以上数字
  • [,.]-一个,.
  • \d+-1个以上数字
  • (?=[\s\S]*key)-一个正向超前查询,它要求任何0+个字符,后跟1个以上的数字后立即在右边紧跟一个单词key

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));