javascript正则表达式在char上拆分匹配,而不是多次

时间:2017-03-14 09:59:42

标签: javascript regex split match

有以下例子:

var s = '#hello \n##1234 \n #hello2';
var splits = s.split(/#[^##]/);

生成:["", "ello ↵#", "234 ↵ ", "ello2"]

但希望它产生:["hello ↵##1234 ↵ ", "hello2"]

如何匹配单个出现的字符(#),但如果它出现多次,则不是,也不是最后一次出现的多次出现。

1 个答案:

答案 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,匹配任何不在定义的集合/范围内的单个字符。)

注意[^##][^#]相同,您不能否定带有否定字符类的序列,只能使用特定字符或范围的角色。