【问题标题】:RegEx to extract text between last forwardslash and specific string (javascript)正则表达式提取最后一个正斜杠和特定字符串之间的文本(javascript)
【发布时间】:2019-09-18 12:50:32
【问题描述】:

我试图在最后一个正斜杠和一个点之间提取一个特定的字符串,但没有成功。我尝试了这个解决方案:R regex for everything between LAST backslash and last dot

以下是完整字符串的示例:

48494,Test,0000,Color,,,htps://url/test/testing/bb/1/dim/<strong>green</strong>.png

我想提取"green",它总是在最后一个斜杠和最后一个点之间。我还尝试了以下正则表达式:

([^\/]+$)

但是这个在反斜杠之后选择了 everything。我想删除最后一个点之后的所有内容,以便只选择颜色。

编辑:这个问题与Get Filename from URL and Strip File Extension 不同,因为我正在寻找一个通过匹配方法而不是替换来使用的正则表达式。

我不能使用replace,因为整个系统都准备使用匹配运算符并且无法更改,因为对于使用正则表达式和匹配的其他场景已经存在很多规则。引擎使用匹配,而不是替换。

【问题讨论】:

  • stackoverflow.com/a/43638372/3832970 可能会起作用。那里还有其他类似的解决方案。
  • 将 R 答案从 the post you linked to 转换为 JS:s.replace(/.*\/|\..*/g, '')
  • 谢谢@WiktorStribiżew 几乎就在那里,它选择了最后一个反斜杠和 .png 的最后一部分的所有内容,2 个匹配项,我想要里面的东西,绿色,所以也许否定它?跨度>
  • 什么意思? "htps://url/test/testing/bb/1/dim/green.png".replace(/.*\/|\..*/g, '') = > green
  • 重要的是一开始就提到不能修改代码。试试/[^\/]+(?=\.[^\/.]*$)/

标签: javascript regex filenames


【解决方案1】:

你可以使用

/[^\/]+(?=\.[^\/.]*$)/

请参阅regex demo

详情

  • [^\/]+ - 除/ 之外的 1+ 个字符
  • (?=\.[^\/.]*$) - 需要. 的正向前瞻,然后在紧靠当前位置右侧的字符串末尾加上除./ 之外的0+ 个字符。由于前瞻是零宽度断言,因此与前瞻匹配的文本不会添加到整体匹配中。

请注意,在 JS 代码中,您应该注意在 RegExp 构造函数和正则表达式文本中使用反斜杠:在前者中使用双反斜杠,在后者中使用单反斜杠,/a\/b\d/ = new RegExp("a/b\\d")(斜杠并不特殊正则表达式元字符,不需要转义)。

JS 演示:

var s = "48494,Test,0000,Color,,,htps://url/test/testing/bb/1/dim/green.png";

console.log(s.match(new RegExp("[^/]+(?=\\.[^/.]*$)")));
console.log(s.match(/[^\/]+(?=\.[^\/.]*$)/));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多