Javascript正则表达式-如何在图像路径之前提取最后一个单词

Javascript正则表达式-如何在图像路径之前提取最后一个单词,javascript,regex,Javascript,Regex,我想使用正则表达式从文件路径中提取最后一个单词。例如,我有: /xyz/blahblah/zzz/abc blah/def xyz-颜色.jpg 我想从路径中提取“颜色”。路径颜色具有不同的语法。唯一一致的是结尾总是-color.jpg,其中color是任何[a-z]单词 有没有一种优雅的方法可以做到这一点 我真的很感激这里的任何帮助。谢谢怎么样 var matched = /-(\w+).jpg/i.exec('/xyz/blahblah/zzz/abc-blah/def-xyz-color.

我想使用正则表达式从文件路径中提取最后一个单词。例如,我有: /xyz/blahblah/zzz/abc blah/def xyz-颜色.jpg

我想从路径中提取“颜色”。路径颜色具有不同的语法。唯一一致的是结尾总是-color.jpg,其中color是任何[a-z]单词

有没有一种优雅的方法可以做到这一点

我真的很感激这里的任何帮助。谢谢

怎么样

var matched = /-(\w+).jpg/i.exec('/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg')[1];
-(\w+)\.jpg
?

如果不想硬编码扩展,可以执行以下操作:

-(\w+)\.\w+\b
当然,这将匹配很多内容,但我假设要匹配的文本将是url;)

编辑:
它将匹配两个组,您只需使用第二个组,因此只需访问第一个索引:

var text = '/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg';
var pattern = /-(\w+)\.\w+\b/;
var match = pattern.exec(text);
alert(match[1]);  // color
或者像@Ryan建议的那样在一行中完成。

怎么样

-(\w+)\.jpg
?

如果不想硬编码扩展,可以执行以下操作:

-(\w+)\.\w+\b
当然,这将匹配很多内容,但我假设要匹配的文本将是url;)

编辑:
它将匹配两个组,您只需使用第二个组,因此只需访问第一个索引:

var text = '/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg';
var pattern = /-(\w+)\.\w+\b/;
var match = pattern.exec(text);
alert(match[1]);  // color
或者像@Ryan建议的那样在一行中完成。

为什么要使用正则表达式

var a = '/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg'
    .split('/').pop()
    .split('-').pop()
    .split('.')[0];

console.log(a);
为什么要使用正则表达式

var a = '/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg'
    .split('/').pop()
    .split('-').pop()
    .split('.')[0];

console.log(a);

为什么您可以只使用子字符串而不使用正则表达式

var path=" /xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg";
var lastHyphen = path.lastIndexOf("-");
var lastDot = path.lastIndexOf(".");
var extractedValue=path.substring(lastHyphen + 1, lastDot);
一个更紧凑的版本将是

var extractedValue=path.substring(path.lastIndexOf("-") + 1, path.lastIndexOf("."));

为什么您可以只使用子字符串而不使用正则表达式

var path=" /xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg";
var lastHyphen = path.lastIndexOf("-");
var lastDot = path.lastIndexOf(".");
var extractedValue=path.substring(lastHyphen + 1, lastDot);
一个更紧凑的版本将是

var extractedValue=path.substring(path.lastIndexOf("-") + 1, path.lastIndexOf("."));
为什么不

var path= "/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg";
/(?:([^-.]+?)\.[^.]+?$)/i.test(path);
var color = RegExp.$1;
alert(color);
为什么不

var path= "/xyz/blahblah/zzz/abc-blah/def-xyz-color.jpg";
/(?:([^-.]+?)\.[^.]+?$)/i.test(path);
var color = RegExp.$1;
alert(color);


六羟甲基三聚氰胺六甲醚。。老实说,在这种情况下我更喜欢正则表达式。对于一个知道正则表达式的程序员来说,用一个简单的正则表达式(为了这个目的)读取代码要比所有那些pop和split干净得多,可读得多。我是说,这就是我的想法,不是吗?您将始终能够进行一些调整以避免使用Regex;)这管用!但是对于中间有任意数量的“/”或“-”的路径,这是否有效?@oscar:Arguable,我更喜欢只在绝对必要时使用regex,因为它会带来额外的开销(比本机字符串函数要贵一些)。如果您想要可读性,请将其拆分为多行(不是双关语;)),这样很容易理解。@david:是的,只要您使用
*-color.ext
格式,它就可以工作。在此之前的任何数量的
/
-
都将被忽略。hmmm。。老实说,在这种情况下我更喜欢正则表达式。对于一个知道正则表达式的程序员来说,用一个简单的正则表达式(为了这个目的)读取代码要比所有那些pop和split干净得多,可读得多。我是说,这就是我的想法,不是吗?您将始终能够进行一些调整以避免使用Regex;)这管用!但是对于中间有任意数量的“/”或“-”的路径,这是否有效?@oscar:Arguable,我更喜欢只在绝对必要时使用regex,因为它会带来额外的开销(比本机字符串函数要贵一些)。如果您想要可读性,请将其拆分为多行(不是双关语;)),这样很容易理解。@david:是的,只要您使用
*-color.ext
格式,它就可以工作。在此之前的任何数量的
/
-
都将被忽略。我想澄清的是,路径是任意长度、任意大小的,并且有一个或多个连字符。唯一一致的是结尾处的-color.jpg,其中“color”是我要提取的单词。颜色是任何非数字单词。嘿,大家,我知道有时使用正则表达式不是最好的主意(解析HTML等),但有时它们会简化很多代码(就像在本例中)。有时你需要它们(因为需求,或者因为你用来验证某些东西的工具迫使你输入一个正则表达式,等等),所以我们必须一直说为什么要使用正则表达式吗?或者为什么不比正则表达式更好?在没有多大意义的情况下,我想澄清路径是任意长度、任意大小的,并且有一个或多个连字符。唯一一致的是结尾处的-color.jpg,其中“color”是我要提取的单词。颜色是任何非数字单词。嘿,大家,我知道有时使用正则表达式不是最好的主意(解析HTML等),但有时它们会简化很多代码(就像在本例中)。有时你需要它们(因为需求,或者因为你用来验证某些东西的工具迫使你输入一个正则表达式,等等),所以我们必须一直说为什么要使用正则表达式吗?或者为什么不比正则表达式更好?在没有多大意义的情况下?thx但这对我不起作用。它还给了我两个字符串“-color.jpg”和“color”。@David它给你的是两组:整个匹配,只有颜色。让我来编辑它;)明白了。谢谢你,奥斯卡。我用的是Ryan的,但你的编辑版对我这样的初学者来说更容易阅读。它还给了我两个字符串“-color.jpg”和“color”。@David它给你的是两组:整个匹配,只有颜色。让我来编辑它;)明白了。谢谢你,奥斯卡。我用过Ryan的,但你的编辑过的对我这样的初学者来说更容易阅读。