如果我有一个字符串,它是正则表达式的来源:
"For example, I have (.*) string with (\.d+) special bits (but this is just an aside)."
有没有办法提取正则表达式的特殊部分?
特别是,当我致电string.match(expr);
答案 0 :(得分:3)
正则表达式可能很复杂,但如果使用([\.\\]([*a-z])\+?)
执行全局正则表达式,它将捕获您的各个字段,而不会根据您的请求包含括号。在this小提琴中输入的演示代码也在下面。
var testString = 'For example, I have (.*) string with (.d+) special bits (but this is just an aside). (\\w+)';
var regex = /([\.\\]([*a-z])\+?)/gi;
var matches_array = testString.match(regex);
//Outputs the following: [".*", ".d+", "\w+"]
答案 1 :(得分:0)
正则表达式的功能不足以识别匹配括号的语言。 (形式证明使用正则表达式和有限状态机的等价以及可能存在无限多级别嵌套的事实。)因此,在每个)
之后匹配第一个(
将使{{1返回(\d+(\.d+)?)
并在每个(\d+(\.d+)
之后匹配最后)
将使(
与整个字符串匹配。
执行此操作的正确方法是使用递归(数学正则表达式不允许,但实际的实现,如PCRE)。您还可以获得非嵌套括号的简单表达式。只需要小心解析转义符:要完全健壮,(\w+) (\w+)
和\(
是特殊的,但\\\(
不是。