sve*_*ens 3 javascript regex split match
有以下示例:
var s = '#hello \n##1234 \n #hello2';
var splits = s.split(/#[^##]/);
Run Code Online (Sandbox Code Playgroud)
生产: ["", "ello ?#", "234 ? ", "ello2"]
但是想要它产生: ["hello ?##1234 ? ", "hello2"]
如何匹配单个出现的字符(#),但如果它出现多次,则不是,也不是最后一次出现的多个字符.
有了split,你需要一个负回顾后,以防止匹配#陆续自带#,但JavaScript不支持lookbehinds.
匹配块而不是分割.match(/(?:##+|[^#])+/g),将匹配1次或多次2+ #或除以下之外的任何字符#:
var s = '#hello \n##1234 \n #hello2';
var splits = s.match(/(?:##+|[^#])+/g);
console.log(splits);Run Code Online (Sandbox Code Playgroud)
图案细节:
(?:##+|[^#])+- 1次或多次出现(+):
##+- #尽可能多的2个或更多符号[^#]- 除#(a 之外的任何字符[^...]都是一个否定的字符类,它匹配任何不在定义的集合/范围内的单个字符).注意:[^##]是相同的[^#],你不能否定具有否定字符类的序列,只能否定特定字符或字符范围.