Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我如何在孤立角色的基础上进行拆分?_Javascript_Regex - Fatal编程技术网

Javascript 我如何在孤立角色的基础上进行拆分?

Javascript 我如何在孤立角色的基础上进行拆分?,javascript,regex,Javascript,Regex,我想要的结果是 也就是说,b和c保持在一起,因为有两个垂直条,而不是一个 我试过: [ 'a', 'b||c', 'd' ] 也就是说,匹配但不捕获分隔符前后的非垂直条。不,根本不起作用 这是在Javascript中实现的,但我认为许多RE库都会以相同的方式工作。您需要/?,但Javascript不支持lookback。不要拆分字符串,而是尝试匹配: /(?:[^|])\|(?:[^|])/ 您需要/?,但JavaScript中不支持lookback。不要拆分字符串,而是尝试匹配: /(

我想要的结果是

也就是说,b和c保持在一起,因为有两个垂直条,而不是一个

我试过:

[ '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我说的很明显,因为这是我想到的第一件事。我相信像蒂姆·皮耶茨克或汤姆·克里斯蒂安森这样的人有更聪明的解决办法,但可惜我不是他们。