Javascript Regexp拆分独特的角色

时间:2014-03-07 00:16:52

标签: javascript regex split

我想用唯一字符'|'拆分字符串(而不是'||')。 例如:

字符串:

hello || world | filter | other

会变成:

['hello || world' , 'filter', 'other']

注意:管道不一定被空格包围

感谢您的帮助:)

3 个答案:

答案 0 :(得分:1)

您可以尝试:

'hello||world|filter|other'.match(/([^|].*?)[^|](?=(?:\||$)(?!\|))/g);
//=> ["hello||world", "filter", "other"]

说明:它开始匹配非管道字符的非管道字符,后面没有其他管道(因此跳过双管道)。

或者使它更准确(和复杂):

'ab|hello||world|filter|other'.match(/((^|[^|]).*?)[^|](?=(?:\||$)(?!\|))/g);
//=> ["ab", "hello||world", "filter", "other"]

答案 1 :(得分:0)

否定之前和之后的字符。

vvar words = "hello || world | filter | other";
words = words.replace(/([^\|]\|[^\|])/g, 'SOMEUNIQUETOKEN').split('SOMEUNIQUETOKEN');

用一些令牌替换单个栏,然后拆分。

答案 2 :(得分:0)

以下是如何通过两步过程完成此操作,首先用空字节('\x00')替换所有单个管道字符,然后拆分空字节:

'hello||world|filter|other'.replace(/(\|)?\|/g, function($0, $1) {
    return $1 ? $0 : '\x00';
}).split('\x00');

我从字符串中删除了空格,以便更明显地说这个方法不依赖于管道周围其他字符的任何假设。

这使用了一种从以下博客文章中模仿JavaScript中的负面外观的技术:
http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

当然'\x00'可以被任何字符串替换,它只需要保证不会出现在任何正常输入中(除非你正在处理,否则通常就是空字节的情况)二进制数据)。