首页 > 解决方案 > 无效的正则表达式(无效组)

问题描述

我收到以下错误:

"message": "Invalid regular expression: /^(?<basename>[a-zA-Z0-9-]+)(\\?(?<testVersion>[a-zA-Z0-9-]+=[a-zA-Z0-9-]+))?(@(?<rawTimestamp>[^.]+))?\\.json/: Invalid group"

我的正则表达式有什么问题?

const FILENAME_ACCEPTOR = /^(?<basename>[a-zA-Z0-9-]+)(\?(?<testVersion>[a-zA-Z0-9-]+=[a-zA-Z0-9-]+))?(@(?<rawTimestamp>[^.]+))?\.json/;

标签: javascript

解决方案


命名捕获组(于 2018 年推出)是一个相当新的事物。您运行的引擎不得支持它们。改用普通的数字捕获组,然后将它们提取到对象中,如果这是您需要的:

const FILENAME_ACCEPTOR = /^([a-zA-Z0-9-]+)(\?([a-zA-Z0-9-]+=[a-zA-Z0-9-]+))?(@([^.]+))?\.json/;

这里,第一个捕获组 ( [1]) 将对应于basename,第三个[3]将对应于testVersion,第四个[4]将对应于rawTimestamp。(您的原始正则表达式已经有一个捕获组,位于第一个和第三个命名组之间 - 如果您实际上没有使用它,最好将其删除)


推荐阅读