Regex: get string between last character occurence before a comma
我需要一些关于雷杰克斯的帮助。
我有一根绳子:
我已经想出了一个有效的测试方法,但由于某些原因,它在NeitherChrome(v44.0.2403.130)或IE(v11.0.9600.17905)控制台中都不起作用。我得到的结果是:
你能告诉我,为什么在线测试人员不工作,我如何才能得到正确的结果吗?
事先谢谢。
PS:我已经用相同的结果测试了一些在线regex测试人员。(regex101.com、regexpal.com、debuggex.com、scriptular.com)
弦
1 | '\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam' |
正在转义,如果您在浏览器控制台中尝试以下操作,您将看到发生的情况:
1 2 3 | var s = '\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam' console.log(s); // prints '\loremipsumdolor,\sitametconseteteur,\sadipscingelitrseddiam' |
要使用原始字符串,必须添加额外的反斜杠,否则它将变为另一个反斜杠,因为它试图转义后面跟着一个反斜杠的任何内容。
它在regexp测试人员中工作的原因是,他们可能会清理输入字符串,以确保按原样对其进行评估。
尝试此操作(为每个操作添加了一个额外的):
1 2 3 4 5 6 7 | str = '\\\\lorem\\ipsum\\dolor,\\\\sit\\amet\\conseteteur,\\\\sadipscing\\elitr\\sed\\diam' re = /\\([^\\]*)(?:,|$)/g str.match(re) // should output ["\dolor,","\conseteteur,","\diam"] |
更新
您不能阻止解释器在字符串文本中转义反斜杠,但此功能将ecmascript6作为string.raw提供。
1 | s = String.raw`\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam` |
记住,在
此外,如果要避免匹配最后一个反斜杠,则需要:
- 在regexp开始时删除EDOCX1[1]
- 使用
+ 而不是* ,以避免与线端匹配(它将创建额外的捕获) - 使用积极的前瞻性
?= 。
这样地
1 2 3 4 | s = String.raw`\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam`; re = /([^\\]+)(?=,|$)/g; s.match(re); // ["dolor","conseteteur","diam"] |
你可以试试这个,
1 | string.match(/[^\\,]+(?=,|$)/gm); |
演示