RegExp 在某个字符串后停止匹配
RegExp to stop matching after a certain string
我正在寻找一个 RegExp 在某个 关键字 之后停止匹配。
这是我的输入:
blabl
文本 1,40
textb 3.50
textc 6,90
blabal 2 3
ddd 3 jj d
key textd textf
2,30 4,70 5,90
我要匹配的是:
blabl
texta 1,40
textb 3.50
textc 6,90
blabal 2 3
ddd 3 jj d
key textd textf
2,30 4,70 5,90
我的正则表达式目前是什么样子
[\d]{1,2}[.,][\d]{2}
我尝试解决的问题
[\d]{1,2}[.,][\d]{2}(?=key)
所以我在寻找这样的东西:
(我要匹配的)(任何)(关键字)
我尝试了以下正则表达式:
([\d]{1,2}[.,][\d]{2}(.|\n)+(?=key))
但现在它匹配:
texta 1,40
textb 3.50
textc 6,90
blabal 2 3
ddd 3 jj d
key textd textf
2,30 4,70 5,90
我阅读了有关非捕获组的信息,这似乎解决了我的问题。所以我尝试了:
([\d]{1,2}[.,][\d]{2}(?>(.|\n)+)(?=key))
但这根本不匹配。
我觉得我快到了,但我真的需要一些帮助。任何我缺少的想法都会受到赞赏。如果您对我的问题有任何疑问,请不要犹豫。
提前感谢您的时间和精力。
您可以使用
/\d+[,.]\d+(?=[\s\S]*key)/g
参见regex demo。
详情
\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));
我正在寻找一个 RegExp 在某个 关键字 之后停止匹配。
这是我的输入:
blabl
文本 1,40
textb 3.50
textc 6,90
blabal 2 3
ddd 3 jj d
key textd textf
2,30 4,70 5,90
我要匹配的是:
blabl
texta 1,40
textb 3.50
textc 6,90
blabal 2 3
ddd 3 jj d
key textd textf
2,30 4,70 5,90
我的正则表达式目前是什么样子
[\d]{1,2}[.,][\d]{2}
我尝试解决的问题
[\d]{1,2}[.,][\d]{2}(?=key)
所以我在寻找这样的东西:
(我要匹配的)(任何)(关键字)
我尝试了以下正则表达式:
([\d]{1,2}[.,][\d]{2}(.|\n)+(?=key))
但现在它匹配:
texta 1,40
textb 3.50
textc 6,90
blabal 2 3
ddd 3 jj d
key textd textf
2,30 4,70 5,90
我阅读了有关非捕获组的信息,这似乎解决了我的问题。所以我尝试了:
([\d]{1,2}[.,][\d]{2}(?>(.|\n)+)(?=key))
但这根本不匹配。
我觉得我快到了,但我真的需要一些帮助。任何我缺少的想法都会受到赞赏。如果您对我的问题有任何疑问,请不要犹豫。
提前感谢您的时间和精力。
您可以使用
/\d+[,.]\d+(?=[\s\S]*key)/g
参见regex demo。
详情
\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));