我想用唯一字符'|'拆分字符串(而不是'||')。 例如:
字符串:
hello || world | filter | other
会变成:
['hello || world' , 'filter', 'other']
注意:管道不一定被空格包围
感谢您的帮助:)
答案 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'
可以被任何字符串替换,它只需要保证不会出现在任何正常输入中(除非你正在处理,否则通常就是空字节的情况)二进制数据)。