【发布时间】:2019-08-05 15:49:04
【问题描述】:
假设我想在任何分隔符处拆分字符串,但不是转义符,我通常可以使用否定的lookbehind和string.split(regex)。
例如:
const regex = /(?<!\\)\,/;
'abc,def'.split(regex);
'abc\\,def'.split(regex);
在abc,def 中的, 处拆分,但不在abc\,def 中拆分。这很好!
但是,如果分隔符本身是反斜杠,则负向查找似乎无法按预期工作:
const regex = /(?<!\\)\\/;
'abc\\def'.split(regex);
'abc\\\\def'.split(regex);
在abc\def 和abc\\def 中的第一个\ 处拆分。
我天真地以为否定的后视不会匹配\ 前面有一个\。
见:https://regex101.com/r/ozkZR1/1
如何在任何不与反斜杠或换行符等特殊字符分开的非转义字符上实现 string.split(regex)(也应该能够转义它们)?
【问题讨论】:
-
Lookbehind 不适用于 JavaScript,Chrome 除外。
-
更确切地说是这些:caniuse.com/#feat=js-regexp-lookbehind 为 Firefox 修复它现在已经有 4 年的历史了:bugzilla.mozilla.org/show_bug.cgi?id=1225665
标签: javascript regex typescript escaping negative-lookbehind