繁体   English   中英

比较 Node.js 中的两个 RegEx 对象

[英]Comparing two RegEx objects in Node.js

我正在使用 NodeRED 对从 Microsoft Azure 认知服务上的图像分析 (OCR) 创建的字符串执行一些逻辑。 图像分析不允许任何模式匹配/输入模式。

生成的字符串(我们称它为“A”)有时会略微错误地解释字符,典型的是“l”=“1”或“s”=“5”。

生成的字符串可以是仅有的几种不同格式之一,为了争论起见,可以说:

  1. [阿兹]{4,5}
  2. [广告]{3}[0-9]{1,2}
  3. [0-9][az]{4}

我需要做的是确定解释后的字符串 ('A') 最接近于('1'、'2' 或 '3')的格式。 一旦确定了这一点,我就计划调整被误解的字符,并希望留下一个(接近)完美的字符串。

我最初的计划是将“A”转换为 RegEx - 所以如果“A”返回为“12345”,我会将其更改为 RegEx object [1|l][2|z]34[5|s],比较这个 object 到 RegEx 对象,希望一个会作为匹配返回。

实际上,解释后的字符串更像是 8 个字母数字和五个不同的(相当复杂的)RegEx 可能性,但为了这个问题的目的,我试图简化问题。

所以问题是:是否可以通过这种方式比较 RegEx? 有没有人对如何改进这种图像分析有任何其他建议?

谢谢

这是一个使用笛卡尔积来比较字符串以寻找可能匹配项的解决方案。 测试字符串是'abclz' ,可以匹配pattern1pattern2

 const cartesian = (...a) => a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat()))); const charMapping = { '1': ['1','l'], 'l': ['1','l'], '2': ['2','z'], 'z': ['2','z'], '5': ['5','s'], 's': ['5','s'] }; const buckets = { pattern1: /^[az]{4,5}$/, pattern2: /^[ag]{3}[0-9]{1,2}$/, pattern3: /^[0-9][az]{4}$/ }; const input = 'abclz'; console.log('input:', input); let params = input.split('').map(c => charMapping[c] || [c]); let toCompare = cartesian(...params).map(arr => arr.join('')); console.log('toCompare:', toCompare); let potentialMatches = toCompare.flatMap(str => { return Object.keys(buckets).map(pattern => { let match = buckets[pattern].test(str); console.log(str, pattern + ':', match); return match? str: null; }).filter(Boolean); }); console.log('potentialMatches:', potentialMatches);

Output:

input: abclz
toCompare: [
  "abc12",
  "abc1z",
  "abcl2",
  "abclz"
]
abc12 pattern1: false
abc12 pattern2: true
abc12 pattern3: false
abc1z pattern1: false
abc1z pattern2: false
abc1z pattern3: false
abcl2 pattern1: false
abcl2 pattern2: false
abcl2 pattern3: false
abclz pattern1: true
abclz pattern2: false
abclz pattern3: false
potentialMatches: [
  "abc12",
  "abclz"
]

问题未解决?试试以下方法:

比较 Node.js 中的两个 RegEx 对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM