用正则表达式求解方程
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 = 1
和3/2 = 1.5
没有这样的方程式求解。 :)
编辑
好的,停止一切。以上是假设 OP 的原始 post 已完成。如果问题实际上是通过编写正则表达式来求解等式 3x + 2y = 14
,那么一种可能的解决方案是...... SPOILER
/(.{6})()(.{8})/
创建输出 2 4
,3*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
的结果 - 这对应于给定方程式的 3x
和 2y
- 这是有道理的match()
return 代表 x
和 y
的值必须正好是 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 个字符)(具有讽刺意味的是),中间的组必须为空。这导致上述表达式。
我正在研究正则表达式以便更好地掌握它,我在互联网上的某个地方找到了这个关于求解方程式 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 = 1
和3/2 = 1.5
没有这样的方程式求解。 :)
编辑
好的,停止一切。以上是假设 OP 的原始 post 已完成。如果问题实际上是通过编写正则表达式来求解等式 3x + 2y = 14
,那么一种可能的解决方案是...... SPOILER
/(.{6})()(.{8})/
创建输出2 4
,3*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
的结果 - 这对应于给定方程式的 3x
和 2y
- 这是有道理的match()
return 代表 x
和 y
的值必须正好是 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 个字符)(具有讽刺意味的是),中间的组必须为空。这导致上述表达式。