Javascript 正则表达式中的相互递归

Javascript 正则表达式中的相互递归,javascript,regex,recursion,Javascript,Regex,Recursion,我想知道如何在Javascript中使用正则表达式实现相互递归 例如,识别语言{a^nb^n}的正则表达式将是/a$0b/,其中$0代表当前正则表达式。这将是基本的递归 相互递归是相同的,但使用不同的正则表达式 我们如何用Javascript完成它 谢谢你的回答 不幸的是,Javascript不支持递归正则表达式 您可以实现一个基本的递归函数,检查第一个字母和最后一个字母(以确保它们分别是a和b),并递归调用内部字符串(示例中的$0) 首先,您意识到这种语言生成的短语的字母数严格来说是偶数,因此

我想知道如何在Javascript中使用正则表达式实现相互递归

例如,识别语言{a^nb^n}的正则表达式将是/a$0b/,其中$0代表当前正则表达式。这将是基本的递归

相互递归是相同的,但使用不同的正则表达式

我们如何用Javascript完成它


谢谢你的回答

不幸的是,Javascript不支持递归正则表达式

您可以实现一个基本的递归函数,检查第一个字母和最后一个字母(以确保它们分别是
a
b
),并递归调用内部字符串(示例中的
$0

首先,您意识到这种语言生成的短语的字母数严格来说是偶数,因此您可以实现一个检查以提前爆发

其次,你唯一的失败案例是两端的字母不匹配

您可以将任何其他正则表达式映射到这样的tester函数。要实现一个相互递归的函数,只需从一个函数调用另一个函数

为了真正体现一个有限状态机,当您进行检查时,一个令牌一个令牌地进行检查;对于上面的示例,首先检查开头是否有
a
,然后递归,然后检查结尾是否有
b


您正在描述的
a^nb^n
语言甚至不是a,因此相互递归的语言离它很远。您不能使用Javascript中的正则表达式引擎来生成相互递归的语言,这就是为什么您需要编写一个有限状态机,以便每次获取一个令牌,并在遇到匹配时进入下一个状态。

不幸的是,Javascript不支持递归正则表达式

您可以实现一个基本的递归函数,检查第一个字母和最后一个字母(以确保它们分别是
a
b
),并递归调用内部字符串(示例中的
$0

首先,您意识到这种语言生成的短语的字母数严格来说是偶数,因此您可以实现一个检查以提前爆发

其次,你唯一的失败案例是两端的字母不匹配

您可以将任何其他正则表达式映射到这样的tester函数。要实现一个相互递归的函数,只需从一个函数调用另一个函数

为了真正体现一个有限状态机,当您进行检查时,一个令牌一个令牌地进行检查;对于上面的示例,首先检查开头是否有
a
,然后递归,然后检查结尾是否有
b


您正在描述的
a^nb^n
语言甚至不是a,因此相互递归的语言离它很远。您不能使用Javascript中的正则表达式引擎来生成相互递归的语言,这就是为什么您需要编写一个有限状态机,以便每次获取一个令牌,并在遇到匹配时进入下一个状态。

JS甚至不支持“basic”正则表达式中的递归。通过将一个表达式内联到另一个表达式中,相互递归应该非常简单。不那么容易。因为A调用B,B调用A,所以它不工作。(这就是为什么它是“递归”)是的,当你在A中内联B,然后A调用A,你就得到了基本的递归。当然JS中仍然不支持。JS甚至不支持正则表达式中的“基本”递归。通过将一个表达式内联到另一个表达式中,相互递归应该非常简单。不是那么容易。因为A调用B,B调用A,所以它不工作。(这就是为什么它是“递归”)是的,当你在A中内联B,然后A调用A,你就得到了基本的递归。当然JS中仍然不支持这一点。我不想为每个正则表达式创建一个函数。这就是为什么我想有一个正则表达式引擎:我不知道该告诉你什么。Javascript正则表达式无法实现这一点。正则表达式是用有限状态机来解析的,不管怎样,这样做并没有什么低效或不切实际的地方。这背后有理论依据。正则语言是那些可以用正则表达式表示的语言。Javascript正则表达式严格遵循这一点。递归正则表达式实际上不是严格意义上的正则表达式;它们就是我们所说的上下文无关语法。上下文无关语言由上下文无关语法表示,上下文无关语法只是有限状态机,它接受标记并提升我们正在构造的短语的状态。这是要使用函数模拟的行为。没有别的办法。是处理
a^n b^n
示例的好资源。我不希望“Regex”是真正的正则表达式,也不希望在内部使用有限自动机。*我不想为每个Regex创建函数。这就是为什么我想有一个正则表达式引擎:我不知道该告诉你什么。Javascript正则表达式无法实现这一点。正则表达式是用有限状态机来解析的,不管怎样,这样做并没有什么低效或不切实际的地方。这背后有理论依据。正则语言是那些可以用正则表达式表示的语言。Javascript正则表达式严格遵循这一点。递归正则表达式实际上不是严格意义上的正则表达式;它们就是我们所说的上下文无关语法。上下文无关语言由上下文无关语法表示,上下文无关语法只是有限状态机,它接受标记并提升我们正在构造的短语的状态。这是要使用函数模拟的行为。没有别的办法。是处理
a^n b^n
示例的好资源。我不希望“Regex”是真正的正则表达式,也不希望在内部使用有限自动机*