问题描述
我想我对正则表达式在Regex中的工作方式有一些误解,下面是一个示例:
12,2 g this is fully random
89 g random string 2
0,6 oz random stuff
1 really random stuff
假设我要匹配度量单位之后的所有内容,因此我希望“这是完全随机的”,“随机字符串2”,“随机填充”和真正的“随机填充”。
为此,我尝试了以下模式:
(?<=(\d(,\d)?) (g|oz)?).*
但是作为“?”表示0或1,在这种情况下,模式似乎将0优先于1-所以我得到:
但是测量单位必须保持“可选”,因为它不必在字符串中(参见第四实例)...
关于如何处理该问题的任何想法?谢谢!
解决方法
更容易查看与之匹配的位置以查看发生了什么。断言const makeGrid = lim => Array.from(Array(lim+1).keys()) // make 101
.slice(1) // drop the 0
.map(i => i%10===0?` ${i}\n`:` ${i}`) // map to have a newline
.join("");
console.log(makeGrid(100));
在直接位于(?<=(\d(,\d)?) (g|oz)?)
和可选(\d(,\d)?)
模式从左到右,并且断言在多个地方为真。但是在它遇到的第一个地方,它与(g|oz)?
匹配,表示0+乘以任意字符,并且将匹配到行尾。
查看职位on regex101
您可能要做的是匹配数字部分,并使空格后跟.*
或g
为可选,并为第二部分使用捕获组。
oz