我有以下字符串:
string>string25>string89 > anotherString
我有以下regExp:
^[\w\_\-\.\d]+(?:\s*)?(?:\>)+(?:\s*)[\w\_\-\.\d]*
然后我希望我的regExp是递归的,从第一个字符开始到最后一个字符。我的语言是Javascript,但我想看看我的regExp是否具备此功能?或者我应该使用while()
条件?我需要一个regExp本身的解决方案,如果不可能,那么请给出Javascript while()
本身的解决方案。
编辑:我想抓住这个:
string>string25
string25>string89
string89 > anotherString
答案 0 :(得分:2)
这与递归所有匹配的关系不大。在Javascript中,您必须使用正则表达式全局
/([^>]+)/g
这将匹配字符串中的所有子字符串:
string
string25
string89 (including space at the end)
或者您可以轻松地将您的字符串与>
分隔符分开并收集个人:
yourString.split(">");
在您写完所需结果后,我建议您选择使用正面前瞻的@HamZa's solution。然后你就会回来了。
/(?=([^>]+>[^>]+))[^>]+>/g
正则表达式从左到右解析字符串迭代每个字符(以简化过程)。另一方面,积极的前瞻不会进展当前的解析位置,而是按照他们的说法行事:如果发现他们的表达,他们会前瞻:
t(?=s)
将匹配t
中的第二个streets
,因为它会看到s
后跟t
。但是,此匹配后的解析将从t
开始继续。
我希望这能解释一下。
但是为了解释实际的正则表达式,它是一个相当聪明的方法,它如何进行字符串解析:
它首先具有正向前瞻(它不会增加解析位置)以检查当前解析位置是否有您正在寻找的对:
(?=([^>]+>[^>]+))
[^>]+>
,它不会被存储为匹配项(不在括号内),而是要注意解析单个字符串的进程,包括下一个>
字符。>
字符后面的下一个字符位置开始,先前的解析进行/递增/前进到它。