【问题标题】:Match groups with regular expression使用正则表达式匹配组
【发布时间】:2015-10-08 09:34:11
【问题描述】:

我想为此创建一个正则表达式:

我的正则表达式:/^(\d+)[&]|[&](\d+)|(\d+)/g

测试结果理想:

  1. 1501 : 1501
  2. 1501&&15011 : 1501, 15011
  3. 1501;or;15011 : 1501, 15011
  4. 1501;OR;15011 : 1501, 15011
  5. >=1501;OR;15011 : 15011
  6. 1501;OR;>=15011 : 1501
  7. >=15011:空

但它似乎不适用于 Javascript 中的 str.match()

【问题讨论】:

  • 为什么不'1501&&15011'.split('&&');
  • 因为测试可能是150115011&&150011501;OR;15011...
  • 那么为什么不只是split('[^\d]+')?拆分非数字字符
  • 为什么不只是/\d+/
  • 只有Tests with desired results是不够的,条件/标准是什么?

标签: javascript regex


【解决方案1】:

尝试:

[;&](\d+)|^(\d+)[&;]?

DEMO

您可以通过捕获的组 1 和 2 获取值。

【讨论】:

  • 不行'>=1501;OR;15011'.match(/[;&](\d+)|^(\d+)[&;]?/g):;15011,结果应该是15011
  • @tonymx227 正如我在回答中所写,您可以使用捕获的组 1 和 2 获取值,而不是直接使用 match()
  • 好的,还有其他功能吗?
  • @tonymx227 检查here,它是在字符串上完成的,具有您提供的所有示例值,但它也应该适用于每一行
  • RegEx.exec(str)方法搜索strString for patternRegEx,end返回匹配值数组,然后你可以通过获取元素得到匹配组(括号中正则表达式匹配的片段)给定索引上的数组(索引 1 上的组 1 等,其中索引 0 将为您提供完整匹配,因此结果与 match() 方法类似)。如果在给定的字符串中某些组不匹配,它将返回undefined,这就是为什么我在显示之前将其过滤掉
猜你喜欢
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多