用正则表达式求解方程

Solving an Equation with Regular Expressions

我正在研究正则表达式以便更好地掌握它,我在互联网上的某个地方找到了这个关于求解方程式 3x+2y=14 的练习,我很困惑,因为我不知道这是可能的,我想我需要学习很多东西,因为这有很大的潜力。这是我找到的练习:

const r = /.../
const fourteen = '1'.repeat(14)
const [_0, threes, _2, twos] = fourteen.match(r)
console.log(threes.length/3, twos.length/2)

知道如何解决这个问题吗?我们只需要找出哪个正则表达式应该出现在程序的第一行。但有些事情我不明白。为什么正则表达式与数字 1 的字符串匹配重复 14 次?是不是很奇怪?

我认为表达式应该是 /.../g 才能获得四场比赛。 我不确定这可能有什么潜力,但这是一个不错的选择小运动。基本上

  • 创建一个长度为 14 的 1 字符串
  • globally 应用一个表达式 consuming 111 每次匹配 并将各个匹配的字符串保存在四个命名变量中
  • 对匹配长度、变量名和除法有点影响,建议3/3 = 13/2 = 1.5

没有这样的方程式求解。 :)

编辑

好的,停止一切。以上是假设 OP 的原始 post 已完成。如果问题实际上是通过编写正则表达式来求解等式 3x + 2y = 14,那么一种可能的解决方案是...... SPOILER

/(.{6})()(.{8})/ 创建输出 2 43*2 + 2*4 = 14

说明

据我所知,重点是提出一个表达式,当与 11111111111111 匹配时,将 match() 函数引入 return 四个值,其中两个求解给定方程式所需要的。

现在我们先看看哪些整数(假设)满足3x + 2y = 14。对我来说,x = 4, y = 1 突然想到,x = 2, y = 4 也可以。让我们暂时记住后者。

那么,就匹配给定字符串而言,这意味着什么?好吧,由于 x 是由 threes.length/3 获得的,而 y 是 twos.length/2 的结果 - 这对应于给定方程式的 3x2y - 这是有道理的match() return 代表 xy 的值必须正好是 3x 和 2x,只要数值分别满足等式。

坚持使用 x = 2, y = 4,这意味着我们正在寻找 match() 结果,其中第二个值的长度为 6 (3 * 2),第四个值的长度为 8 (2 * 4) .现在我们需要知道 match() 是如何工作的,并编写一个表达式来迎合它。

当表达式有捕获组时,match() return 是一个包含匹配字符串和所有捕获字符串的数组。所以,在练习中:_0是整个匹配,threes是第一个捕获组的内容,_2是第二个捕获组的内容,twos是第三个捕获组的内容。这意味着我们需要三个捕获组,并且为了匹配第 2 和第 4 个位置的 6 和 8 个字符(总共 14 个字符)(具有讽刺意味的是),中间的组必须为空。这导致上述表达式。