We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
回溯的本质上就是深度优先搜索算法,从一初始状态开始匹配,若是匹配到尽头未遇到匹配失败,这种情况下不会发生回溯,但是尝试匹配失败时,接下来的一步就是后退一步或若干步,从 另一种可能“状态”出发,继续搜索,直到所有的“路径”(状态)都试探过,知道匹配成功,这一行为称为回溯。
当多个贪婪量词挨着存在,并相互有冲突时,会尽可能多的匹配
var string = "12345"; var regex = /(\d{1,3})(\d{1,3})/; console.log( string.match(regex) ); // => ["12345", "123", "45", index: 0, input: "12345"] // 前面匹配123,后面匹配45
惰性量词就是在贪婪量词后面加个问号。表示尽可能少的匹配
var string = "12345"; var regex = /(\d{1,3}?)(\d{1,3})/; console.log( string.match(regex) ); // => ["1234", "1", "234", index: 0, input: "12345"] // 其中 \d{1,3}? 只匹配到一个字符 "1",而后面的 \d{1,3} 匹配了 "234"
分支结构,可能前面的子模式会形成了局部匹配,如果接下来表达式整体不匹配时,仍会继续尝试剩下的分 支。这种尝试也可以看成一种回溯
var string = "candy"; var regex = /can|candy/; console.log( string.match(regex) ); // ["can", index: 0, input: "candy", groups: undefined]
正则表达式的结构包括字符字面量、字符组、量词、锚、分组、选择分支、反向引用的七种结构:
正则表达式的操作符都体现在结构中,即由特殊字符和普通字符所代表的一个个特殊整体,优先级如下:
示例: 身份证:
let regex = /^(\d{15}|\d{17}[\dxX])$/
IPV4 地址:
let regex = /^((0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])$/
The text was updated successfully, but these errors were encountered:
No branches or pull requests
正则表达式回溯法原理
回溯的本质上就是深度优先搜索算法,从一初始状态开始匹配,若是匹配到尽头未遇到匹配失败,这种情况下不会发生回溯,但是尝试匹配失败时,接下来的一步就是后退一步或若干步,从 另一种可能“状态”出发,继续搜索,直到所有的“路径”(状态)都试探过,知道匹配成功,这一行为称为回溯。
贪婪量词
当多个贪婪量词挨着存在,并相互有冲突时,会尽可能多的匹配
惰性量词
惰性量词就是在贪婪量词后面加个问号。表示尽可能少的匹配
分支结构
分支结构,可能前面的子模式会形成了局部匹配,如果接下来表达式整体不匹配时,仍会继续尝试剩下的分
支。这种尝试也可以看成一种回溯
总结
正则表达式的拆分
正则表达式的结构包括字符字面量、字符组、量词、锚、分组、选择分支、反向引用的七种结构:
正则表达式的操作符都体现在结构中,即由特殊字符和普通字符所代表的一个个特殊整体,优先级如下:
注意要点
例子:/^abc|bcd$/ => /^(abc|bcd)$/
例子: /^[abc]{3}+$/ => /([abc]{3})+/
示例:
身份证:
IPV4 地址:
The text was updated successfully, but these errors were encountered: