用于在第n个字符处拆分字符串的正则表达式单行,其中n是可变长度

时间:2013-04-29 15:02:54

标签: javascript regex syntax

我发现了一些类似的问题,但没有一个是干净的单行,我认为这应该是可能的。我想在特定字符的最后一个实例(在我的情况下为.)中拆分一个字符串。

var img = $('body').attr('data-bg-img-url'); // the string http://sub.foo.com/img/my-img.jpg
var finalChar = img.split( img.split(/[.]+/).length-1 ); // returns int 3 in above string example
var dynamicRegex = '/[.$`finalChar`]/';

我知道我在这里违反了一些规则,想知道是否有人比我更聪明,知道将它们放在一起压缩它的正确方法吗?

编辑 - 此处的最终目标是将http://sub.foo.com/img/my-img.jpg拆分并存储为单独的字符串。

2 个答案:

答案 0 :(得分:3)

在正则表达式中,.*是贪婪的,这意味着它将尽可能匹配。因此,如果您想匹配最后一个.,则可以执行以下操作:

/^.*\./

从外观上看,您正在尝试获取文件扩展名,因此您需要添加捕获:

var result = /^.*\.(.*)$/.exec( str );
var extension = result[1];

对于这两个部分:

var result = /^(.*)\.(.*)$/.exec( str );
var path = result[1];
var extension = result[2];

答案 1 :(得分:0)

您可以对句点使用lastIndexOf()方法,然后使用substring方法获取第一个和第二个字符串。 split()方法最好用于要在所有实例中拆分的foreach场景中。对于这些类型的情况,子串是最好的,在这种情况下,您要破坏字符串的单个实例。