Javascript 我如何在孤立角色的基础上进行拆分?
我想要的结果是 也就是说,b和c保持在一起,因为有两个垂直条,而不是一个 我试过:Javascript 我如何在孤立角色的基础上进行拆分?,javascript,regex,Javascript,Regex,我想要的结果是 也就是说,b和c保持在一起,因为有两个垂直条,而不是一个 我试过: [ 'a', 'b||c', 'd' ] 也就是说,匹配但不捕获分隔符前后的非垂直条。不,根本不起作用 这是在Javascript中实现的,但我认为许多RE库都会以相同的方式工作。您需要/?,但Javascript不支持lookback。不要拆分字符串,而是尝试匹配: /(?:[^|])\|(?:[^|])/ 您需要/?,但JavaScript中不支持lookback。不要拆分字符串,而是尝试匹配: /(
[ 'a', 'b||c', 'd' ]
也就是说,匹配但不捕获分隔符前后的非垂直条。不,根本不起作用
这是在Javascript中实现的,但我认为许多RE库都会以相同的方式工作。您需要/?,但Javascript不支持lookback。不要拆分字符串,而是尝试匹配:
/(?:[^|])\|(?:[^|])/
您需要/?,但JavaScript中不支持lookback。不要拆分字符串,而是尝试匹配:
/(?:[^|])\|(?:[^|])/
在您的情况下,由于管道字符|不是单词字符,您可以使用:
'a|b||c|d'.match(/([^|]|\|{2,})+/g)
为了避免JS缺乏落后的外观
这将在第一个|上分开,确保后面没有|
但是,如果您的分隔项以符号结尾,例如a.| b | | c | d-a,则它将失败。不会被分开
我认为最好的办法是按照@NullUserException的建议,用占位符替换“| |”,拆分并替换回,或者@Bergi的匹配解决方案而不是拆分。在您的情况下,由于管道字符|不是单词字符,您可以使用:
'a|b||c|d'.match(/([^|]|\|{2,})+/g)
为了避免JS缺乏落后的外观
这将在第一个|上分开,确保后面没有|
但是,如果您的分隔项以符号结尾,例如a.| b | | c | d-a,则它将失败。不会被分开
我认为最好的办法是按照@NullUserException的建议,用占位符替换“| |”,拆分并替换回,或者@Bergi的匹配而不是拆分的解决方案。虽然?:使其不将这些匹配放在捕获组中,但它会消耗匹配,使其提供您看到的结果。解决这一问题最明显的方法是使用零宽度断言lookaround,但JS不支持lookbehind。解决这一问题的简单方法是搜索并替换| |的所有实例,将它们替换为某种占位符,在|上拆分,然后恢复| |。@NullUserException-最明显的方法。。。“显而易见”一词的新颖用法。我认为用JS正则表达式无法做到这一点。你需要的是一个向前看和向后看的条件,所以b和c之间的任何一个都不匹配?可以在PREG中使用,但我认为浏览器不支持这种语法。@Malvolio我说的很明显,因为这是我想到的第一件事。我相信像蒂姆·皮埃茨克或汤姆·克里斯蒂安森这样的人有更聪明的解决办法,但可惜我不是他们。虽然?:使它不把这些比赛放在捕获组中,但它确实消耗了比赛,使它给你你看到的结果。解决这一问题最明显的方法是使用零宽度断言lookaround,但JS不支持lookbehind。解决这一问题的简单方法是搜索并替换| |的所有实例,将它们替换为某种占位符,在|上拆分,然后恢复| |。@NullUserException-最明显的方法。。。“显而易见”一词的新颖用法。我认为用JS正则表达式无法做到这一点。你需要的是一个向前看和向后看的条件,所以b和c之间的任何一个都不匹配?可以在PREG中使用,但我认为浏览器不支持这种语法。@Malvolio我说的很明显,因为这是我想到的第一件事。我相信像蒂姆·皮耶茨克或汤姆·克里斯蒂安森这样的人有更聪明的解决办法,但可惜我不是他们。