连接三个变量,然后使用正则表达式提取

时间:2019-07-16 21:49:43

标签: javascript regex

我将3个变量连接在一起,并以--分隔的文件名用于另一个Cloud函数。我使用以下代码执行此操作:

const newFileName = size + "--" + bytes + "--" + name + ".txt";

我以后如何使用正则表达式将它们分开?

大小(在第一个-之前提取)

字节(先提取后-)

名称(秒后提取-)

3 个答案:

答案 0 :(得分:1)

如果您始终使用相同的扩展名.txt,则可以从字符串中删除该部分,然后在--上拆分

let str = "aaa--bbb--ccc.txt";
[size, bytes, name] = str.substring(0, str.length - 4).split("--");
console.log(size);
console.log(bytes);
console.log(name);

另一种选择是在--或与最后一个点匹配的模式上分割,然后在字符串末尾才匹配一个点。

let str = "aaa--bbb--ccc.txt";
[size, bytes, name] = str.split(/--|\.[^.]+$/);
console.log(size);
console.log(bytes);
console.log(name);

答案 1 :(得分:-1)

如果使用此正则表达式,它将把这三个部分分成3个不同的捕获组,分别命名为“大小”,“字节”和“名称”:

^(?<size>.*?)\-\-(?<bytes>.*?)\-\-(?<name>.*?[.txt])$

在javascript中,您可以使用此代码随后将组拉出:

var reg = /^(?<size>.*?)\-\-(?<bytes>.*?)\-\-(?<name>.*?[.txt])$/
var matches = "123--456--test.txt".match(reg);
var size = matches["groups"]["size"]
var bytes = matches["groups"]["bytes"]
var name = matches["groups"]["name"]

“ 123--456--test.txt”字符串是您要从中提取数据的字符串。

编辑:

就像StackSlave指出的那样,并不总是支持上述命名的捕获组。如果您需要支持无法处理命名组的浏览器或语言,则可以执行以下操作:

var reg = /^(.*?)\-\-(.*?)\-\-(.*?)$/
var matches = "123--456--test.txt".match(reg);
var size = matches[1]
var bytes = matches[2]
var name = matches[3]

编辑编辑:

要获取不带扩展名的文件名,请改用此正则表达式:

var reg = /(.*?)\-\-(.*?)\-\-(.*?)\./
var matches = "123--456--test.txt".match(reg);
var size = matches[1]
var bytes = matches[2]
var name = matches[3]

答案 2 :(得分:-1)

这是一个数字示例:

var str = 'size--bytes--name.ext', m = str.match(/^(.+)--(.+)--(.+)(?:\..+)$/);
console.log(m); console.log('size:'+m[1]); console.log('bytes:'+m[2]); console.log('name:'+m[3]);