regex 同一模式中的多个组由OR分隔,但组索引保持不变

3zwtqj6y  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(183)

(为这个令人困惑的标题道歉,不知道如何措辞更好)
给定此示例文本:
保存10%在所有项目时...
有时也可以是这样的:
另外,20%的折扣就在今天。
(the文本永远不会同时包含两个句子)
我想获取其中一个百分比值。我尝试了这个模式:/(\d{1,2})% off|Save (\d{1,2})%/
10在组索引2中,20在组索引1
我希望它在同一组索引下捕获,例如:

matches = text.match(/(\d{1,2})% off|Save (\d{1,2})%/)

// matches[1] == '10'
// or
// matches[1] == '20'
byqmnocz

byqmnocz1#

您可以尝试匹配以下正则表达式。

(?<!\d)\d{1,2}(?=% off)|(?<=Save )\d{1,2}(?=%)

Demo
如果没有负后看,(?<!\d)"123456% off"(例如)将被匹配。
该表达式可以分解如下。

(?<!        # begin negative lookbehind
  \d        # match a digit
)           # end  negative lookbehind
\d{1,2}     # match 1 or 2 digits
(?=         # begin positive lookahead
  % off     # match '% off'
)           # end positive lookahead
|           # or
(?<=        # begin positive lookbehind
  Save[ ]   # match 'Save '
)           # end positive lookbehind
\d{1,2}     # match 1 or 2 digits
(?=         # begin positive lookahead
  %         # match '%'
)           # end positive lookahead

相关问题