我将3个变量连接在一起,并以--
分隔的文件名用于另一个Cloud函数。我使用以下代码执行此操作:
const newFileName = size + "--" + bytes + "--" + name + ".txt";
我以后如何使用正则表达式将它们分开?
大小(在第一个-之前提取)
字节(先提取后-)
名称(秒后提取-)
答案 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]);