【发布时间】:2020-07-24 08:52:42
【问题描述】:
我有一个带有一些命名组的正则表达式,当我测试它时匹配得很好,但不是我正在运行的应用程序的一部分。
在下面的代码中,regex.exec 将在我的应用环境中返回 null,但在其他任何地方都匹配。
/^(goto|gt) (?<roomName>.*)/gim
当我在节点终端中测试这个正则表达式时:
> /^(goto|gt) (?<roomName>.*)/gim.exec('goto cell')
[
'goto cell',
'goto',
'cell',
index: 0,
input: 'goto cell',
groups: [Object: null prototype] { roomName: 'cell' }
]
>
我得到了一场快乐的比赛。 解析后有值
现在,当我在应用程序中运行相同的代码时,在调试器中可以看到,regex.test 可以工作,但regex.exec() 不会产生任何结果。
解析为空
在这个 SO snipper 引擎中,似乎还有另一个问题是剥离匹配组,但这至少对我来说在本地是匹配的。
任何其他想法为什么这种行为是片状的? 环境、节点版本等都与我运行的相同。 它是打字稿,但我检查了转译的代码,它是一样的。
const RouterService = {
goto () { console.log('do something') }
}
const input = 'goto cell'
const rule = {
cname: 'goto',
rex: /^(goto|gt) (?<roomName>.*)/gim,
event: RouterService.goto,
type: 'command'
}
if (rule) {
const parsed = rule.rex.exec(input)
console.log('input', input)
console.log('rule', rule)
console.log('parsed', parsed)
parsed.groups = { ...parsed.groups } // Object null prototype
const parserResult = {
parsed, rule
}
console.log('parserResult', parserResult)
}
在 SO 引擎中 解析后有值
但记录我的应用 解析为空
应用调试器: 解析为空
这是 repl.it 上的相同代码,比 SO 引擎更接近一点。
https://repl.it/@dcsan/ChiefAggravatingAlphatest 解析后有值
啊正则表达式。现在我有两个问题。
【问题讨论】:
标签: javascript node.js regex typescript