gpt4 book ai didi

javascript - 正则表达式:获取逗号之前出现的最后一个字符之间的字符串

转载 作者:行者123 更新时间:2023-11-29 18:05:09 26 4
gpt4 key购买 nike

我需要一些有关 Regex 的帮助。

我有这个字符串:\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam
并希望得到结果:["dolor", "conseteteur", "diam"]
所以在单词中最后一个反斜杠和逗号或结尾之间的单词.

我已经想出了一个可行的 test ,但由于某些原因,它在
Chrome (v44.0.2403.130) 和 IE (v11.0.9600.17905) 控制台中都不起作用。

我得到了结果: ["\loremipsumdolor,", "\sitametconseteteur,", "\sadipscingelitrseddiam"]

能否请您告诉我,为什么在线测试器不工作以及我如何才能获得正确的结果?

提前致谢。

PS:我测试了几个在线正则表达式测试器,结果都是一样的。 (regex101.com、regexpal.com、debuggex.com、scriptular.com)

最佳答案

字符串

'\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam'

正在转义,如果您在浏览器的控制台中尝试以下操作,您将看到发生了什么:

var s = '\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam'
console.log(s);
// prints '\loremipsumdolor,\sitametconseteteur,\sadipscingelitrseddiam'

要使用您的原始字符串,您必须添加额外的反斜杠,否则它会变成一个不同的字符串,因为它会尝试转义后跟一个反斜杠的任何内容。

它在正则表达式测试器中工作的原因是因为它们可能会清理输入字符串以确保它按原样进行评估

试试这个(为每个添加一个额外的\):

str = '\\\\lorem\\ipsum\\dolor,\\\\sit\\amet\\conseteteur,\\\\sadipscing\\elitr\\sed\\diam'

re = /\\([^\\]*)(?:,|$)/g

str.match(re)

// should output ["\dolor,", "\conseteteur,", "\diam"]

更新

您不能阻止解释器转义字符串文字 中的反斜杠,但此功能随 EcmaScript6 一起提供为 String.raw

s = String.raw`\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam`

请记住在 String.raw 中使用反引号 而不是单引号。它在最新的 Chrome 中工作,但我不能说所有其他浏览器,如果它们适度旧,它可能没有实现。

此外,如果您想避免匹配最后一个反斜杠,您需要:

  • 删除正则表达式开头的 \\
  • 使用 + 而不是 * 来避免匹配行尾(它会创建一个额外的捕获)
  • 使用积极的前瞻性 ?=

像这样

s = String.raw`\\lorem\ipsum\dolor,\\sit\amet\conseteteur,\\sadipscing\elitr\sed\diam`;
re = /([^\\]+)(?=,|$)/g;
s.match(re);
// ["dolor", "conseteteur", "diam"]

关于javascript - 正则表达式:获取逗号之前出现的最后一个字符之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com