var selector = "div.class > span:not(:first-child) a[href]" var chunker = /((?:\([^\)]+\)|\^\+\]|[^ ,\(\[]+)+)(\s*,\s*)?/g; var parts = []; // Reset the position of the chunker regexp (start from beginning) chunker.lastIndex = 0; // Collect the pieces while ((m = chunker.exec(selector)) !== null) { parts.push(m[1]); // Stop if we've countered a comma if (m[2]) { extra = RegExp.rightContext; break; } }
其中,正则中的 \^\+\] 会如何匹配?
最后的结果很奇怪…
quote[/quote]
([^)]+) 匹配一个 ( ),该()可以包含除 ) 之外的内容
^+] 匹配^+],如果想直接匹配^、+、],是需要转义的
[^ ,([]+匹配的是不含有空格,逗号,左小括号,左中括号的一个或多个字符
将(?:([^)]+)|^+]|[^ ,([]+)看作一个整体,?:是一个零宽断言,表示
用([^)]+)|^+]|[^ ,([]+去匹配,但不捕获匹配的文本,也不给此分组分配组号
[code="java"]#show ?:
irb(main):030:0> re4 = /\b\w+(?=ing\b)/
=> /\b\w+(?=ing\b)/
irb(main):034:0> re5 = /\b\w+(ing\b)/
=> /\b\w+(ing\b)/
irb(main):038:0> s = "recruiting"
=> "recruiting"
irb(main):039:0> re4 =~ s
=> 0
irb(main):041:0> Regexp.last_match
=> #
irb(main):042:0> Regexp.last_match(1)
=> nil
irb(main):043:0> re5 =~ s
=> 0
irb(main):044:0> Regexp.last_match
=> #
irb(main):045:0> Regexp.last_match(1)
=> "ing"
[/code]
chunker.exec(selector)
["div.class", "div.class", undefined]