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