You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化正则表达式以兼容单尺寸与多尺寸匹配并实现指定分组提取

Hey there! Let's tackle this regex adjustment step by step.

First, let's break down why the original pattern fails for single-size cases: the original regex (?i)([a-z\d]+(?:[/-][a-z\d]+)?)[/-]([a-z\d]+(?:[/-][a-z\d]+)?) requires a mandatory separator (- or /) between two groups, so it can't match standalone values like 40 that have no separator at all. Also, it doesn't account for spaces around separators (like - or /) which you mentioned are valid.

Modified Regex Pattern

Here's an adjusted regex that handles both single-size and multi-size scenarios, captures the first size in group 1, supports all your separator variants, and ignores any leading content:

(?i).*?([a-z\d]+(?:[/-][a-z\d]+)?)(?:\s*[-/]\s*([a-z\d]+(?:[/-][a-z\d]+)?))?$

Breakdown of the Pattern

Let's break this down piece by piece to understand how it works:

  • (?i): Enables case-insensitive matching (kept from your original regex)
  • .*?: Non-greedy match for any leading content (like S1 - in your test cases) so we skip past irrelevant prefixes
  • ([a-z\d]+(?:[/-][a-z\d]+)?): Group 1 – captures either a single size value (e.g., 40, XS) or a composite size with internal separators (e.g., XXS/XS, 40-42)
  • (?:\s*[-/]\s*([a-z\d]+(?:[/-][a-z\d]+)?))?: Optional non-capturing group for the second size part:
    • \s*[-/]\s*: Matches valid separators (-, /, -, /) with optional whitespace before/after
    • ([a-z\d]+(?:[/-][a-z\d]+)?): Group 2 – same logic as Group 1, captures the second size part (will be empty/null if there's only one size)
  • $: Ensures we match up to the end of the string, avoiding partial matches

Test Case Validation

Let's run this against all your test cases to confirm it works as expected:

  • S1 - XXS/XS-S/M: Group 1 = XXS/XS, Group 2 = S/M
  • S1 - 40-42-36-38: Group 1 = 40-42, Group 2 = 36-38
  • XXS/XS: Group 1 = XXS/XS, Group 2 = (empty)
  • 40-42: Group 1 = 40, Group 2 = 42
  • 40: Group 1 = 40, Group 2 = (empty)

All test cases are now covered, and Group 1 always holds the first size value as you requested.

内容的提问来源于stack exchange,提问作者Steffen Mandrup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:02:32