javascript - 分割一个可以在其中转义分隔符的字符串

标签 javascript regex split escaping

这是一个非常简单的正则表达式,但是我无法理解如何扩展此正则表达式,因此只要它在字符串中转义,它就允许我使用定界符。这是我所拥有的:

// Contents of str is exactly '|1|2|\|Three and Four\||5'
str.match(/[^|]/);

// Looking for: ['1', '2', '|Three and Four|', '5']


因此,当前我的正则表达式会选择不是|字符的所有内容,然后获得每个项目的数组。但是我想做的是,如果先用|转义了\字符,则忽略它作为分隔符,但是我当然不希望\通过。

我知道这将被标记为十亿个其他正则表达式问题的重复,但是我尝试将其他解决方案应用于我自己,并尝试使用regex101.com。 Reg,我的Regex Fu不强。

P.s.任何人都知道学习JS风格的正则表达式的好资源吗?

最佳答案

如果在支持正负表达式(例如Chrome)的正则表达式引擎中使用JavaScript,并且仅显示单个/简单转义,而没有任何方法进行转义,则可以使用相对简单的负面回顾:

'|1|2|\\|Three and Four\\||5'.split(/(?<!\\)\|/)

# -> ["", "1", "2", "\|Three and Four\|", "5"]


这表示-在支持负向后看功能的Chrome浏览器中-分割为“ |”不能以“ \”开头。

Here is a method to convert a look-behind to a look-ahead用于引擎兼容性。在RegEx needed to split javascript string on "|" but not "\|"中也讨论了变体。

但是,如前所述,以上内容并未涉及\ |序列,因此离开转义序列。



替代地,多步骤方法也可以解决该问题,这也可以作为过程的一部分来处理转义字符。


用“替代”字符/字符串替换转义的分隔符
在其余的(未转义的)分隔符上进行分割
将“备用”字符/字符串转换回各个组件


在代码中

str = '|1|2|\\|Three and Four\\||5'

# replace \| -> "alternative"
# this assumes that \\| (escape-the-escape) is not allowed
rep = str.replace(/\\[|]/g, '~~~~')

# replace back, without any of the escapes
res = rep.split('|').map(function (f) { return f.replace(/~~~~/g, "|") })

# res -> ["", "1", "2", "|Three and Four|", "5"]

关于javascript - 分割一个可以在其中转义分隔符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49712863/

相关文章:

JavaScript:如何删除外部数组内的所有方括号?

javascript - 悬停时缩放背景图像

javascript - 使用 React 获取数组中的下一个/上一个项目

iphone - 验证电话号码 ios

java - 正则表达式 - 如何识别字符串 + 空格 + 字符串

python - Grep for multiple strings 和多个字符串包括以下行

c#拆分字符串的输入

javascript - React Native - 文档未定义

python - 在 Python 中使用正则表达式将文本拆分为句子

r - 将数据框字符串列拆分为多列