有以下例子:
var s = '#hello \n##1234 \n #hello2';
var splits = s.split(/#[^##]/);
生成:["", "ello ↵#", "234 ↵ ", "ello2"]
但希望它产生:["hello ↵##1234 ↵ ", "hello2"]
如何匹配单个出现的字符(#),但如果它出现多次,则不是,也不是最后一次出现的多次出现。
答案 0 :(得分:5)
使用split
,您需要一个负面的lookbehind以防止匹配#
来自另一个#
,但JavaScript不支持lookbehinds。
匹配块而不是与.match(/(?:##+|[^#])+/g)
分开,以匹配1个或多个2+ #
或#
以外的任何字符:
var s = '#hello \n##1234 \n #hello2';
var splits = s.match(/(?:##+|[^#])+/g);
console.log(splits);

模式详情:
(?:##+|[^#])+
- 1次或更多次出现(+
):
##+
- 2个或更多#
符号,尽可能多[^#]
- #
以外的任何字符(a [^...]
都是negated character class,匹配任何不在定义的集合/范围内的单个字符。) 注意:[^##]
与[^#]
相同,您不能否定带有否定字符类的序列,只能使用特定字符或范围的角色。