javascript - Xregexp javascript 可选命名组,以空格分隔

标签 javascript node.js regex expression xregexp

我正在调查 Xregexp支持以字母开头的命名参数的表达式。这是我的表达:

(?:d:|duration:)(?<time>.*\S+).*(?:t:|title:)(?<title>(?:.*\S+))(?:.*(?:(?:p:|prize:)(?<prize>.*\S+)))

它运行良好,但问题是我想把 p:<prize>组作为可选,我应该使用哪个表达式?

我还尝试在出现空白时结束捕获

示例:

我想要什么:

duration:1h 5m 1s title:Title test [p:prize]<-optionnal group

我想要prize组作为可选

与当前表达式匹配:

duration:1h 5m 1s title:Title test p:Something random

小组结果:

  • time :1h 5m 1s

  • title :Title test

  • prize :Something random

最佳答案

您需要稍微限制您的模式才能摆脱 .*这将耗尽后续子模式最后一次出现的所有内容。然后,每当您需要将值匹配到下一个键时,请使用惰性点模式( .*? ),并添加 $ 。 (字符串结尾) anchor 位于末尾,以确保您将获得带有惰性点的所有文本。

d(?:uration)?:(?<time>.*?)\s*t(?:itle)?:(?<title>.*?)\s*(?:p(?:rize)?:(?<prize>.*))?$

请参阅regex pattern .

详细信息

  • d(?:uration)?: - 一个d:duration:
  • (?<time>.*?) - 组“时间”:任何零个或多个字符,尽可能少,直到后续子模式的最左边出现
  • \s* - 0+ 空格
  • t(?:itle)?: - 要么 title:t:
  • (?<title>.*?) - 组“标题”:任何零个或多个字符,尽可能少
  • \s* - 0+ 空格
  • (?: - 可选非捕获组的开始匹配 1 或 0 次出现:
    • p(?:rize)?: -p:prize:
    • (?<prize>.*) - 组“奖品”:任何零个或多个字符,尽可能少
  • )? - 可选组的结尾
  • $ - 字符串结尾。

关于javascript - Xregexp javascript 可选命名组,以空格分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45917937/

相关文章:

javascript - 如果是本地的,则替换 href 链接扩展

python - 将带有键和值的字符串转换为 python 字典的最有效方法

javascript - jQuery 和 JavaScript 函数

javascript - 无法让 Firebase 数据在简单的 Vue 应用程序上显示

javascript - 如何从webpack javascript中的文件夹,子文件夹及其子文件夹动态获取文件

mysql - 具有 Node 和 Sequelize 的 Multi-Tenancy 结构

node.js - gem已安装,无法导入波本威士忌

java - 使用正则表达式模式的电话号码类别

javascript - 在 HTTP 请求/响应中查看 cookie

linux - 内存泄漏会导致 getaddrinfo EMFILE