【问题标题】:Regex one-liner for splitting string at nth character where n is a variable length用于在第 n 个字符处拆分字符串的正则表达式单行,其中 n 是可变长度
【发布时间】:2025-12-02 14:55:02
【问题描述】:

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

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 拆分并存储为单独的字符串。

【问题讨论】:

  • 你的结局是什么?
  • str.substr(str.lastIndexOf('.')); // .jpg ;)
  • 最终目标是将http://sub.foo.com/img/my-img.jpg 拆分并存储为单独的变量。
  • /./ 匹配任何字符,/\./ 匹配点。
  • 如果您需要扩展以进行验证或从外部站点抓取图像等操作,请根据实际文件内容进行 mimetype 检测。它会更可靠。

标签: javascript regex syntax


【解决方案1】:

在正则表达式中,.* 是贪婪的,这意味着它会尽可能匹配。因此,如果你想匹配到最后一个.,你可以这样做:

/^.*\./

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

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

对于这两个部分:

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

【讨论】:

  • 谢谢!实际上需要将http://sub.foo.com/img/my-img.jpg 存储为单独的变量。
  • 谢谢卢卡斯 - 这就是我要找的......前几天刚用过exec(),我知道它应该很简单,并且在正确的功能上很模糊,你的答案是正确的.
【解决方案2】:

可以对句号使用lastIndexOf()方法,然后使用substring方法获取第一个和第二个字符串。 split() 方法更适合用于要在所有实例上进行拆分的 foreach 场景。对于在字符串的单个实例处中断的这些类型的情况,子字符串更可取。

【讨论】:

    最近更新 更多