我正在尝试构建一个正则表达式来捕获我的S3文件名上传的有用部分。我使用了一个正则表达式生成器,到目前为止我有这个测试(导致javascript抛出错误):
/[A-Za-z]++[^\.\w][^\.]++|(?<=_)\w++(?=\.)/g
以下是我正在使用的一些示例字符串(需要匹配的模式):
"MTxoZbRRUu9BfQLvAWwP_Bruntwood Leeds Digital Festival ad.pdf" // desired match "Bruntwood Leeds Digital Festival ad"
"bbZRU3329BfXXvvAWwP_short-video.mp4" // desired match "short-video"
"zQZFnWVcRUbFNGyGdIP0_MGI-Artificial-Intelligence-Discussion-slides.pptx" // desired match "MGI-Artificial-Intelligence-Discussion-slides"
如果有帮助 - 我需要在javascript上运行此正则表达式测试。
const filename = "bbZRU3329BfXXvvAWwP_short-video.mp4";
const match = filename.match(regex);
console.log(match); // "short-video"
谢谢!
答案 0 :(得分:3)
根据您的示例,您可以使用更简单的正则表达式:
const regex = /_([^.]+)/;
const inputs = [
"MTxoZbRRUu9BfQLvAWwP_Bruntwood Leeds Digital Festival ad.pdf", // desired match "Bruntwood Leeds Digital Festival ad"
"bbZRU3329BfXXvvAWwP_short-video.mp4", // desired match "short-video"
"zQZFnWVcRUbFNGyGdIP0_MGI-Artificial-Intelligence-Discussion-slides.pptx" // desired match "MGI-Artificial-Intelligence-Discussion-slides"
];
for (const input of inputs) {
const match = input.match(regex);
console.log(match[1]);
}
&#13;
答案 1 :(得分:2)
我使用了正则表达式生成器
但似乎不适用于JavaScript正则表达式。每个工具和库都有自己的正则表达式怪癖。特别是,JS不支持像++
这样的所有格量词(一般也不支持独立子句,(?>
)
)。
JS也不支持look-behind,(?<=
)
。
你可以,例如这样做:
const strs = [
"MTxoZbRRUu9BfQLvAWwP_Bruntwood Leeds Digital Festival ad.pdf",
"bbZRU3329BfXXvvAWwP_short-video.mp4",
"zQZFnWVcRUbFNGyGdIP0_MGI-Artificial-Intelligence-Discussion-slides.pptx",
];
for (const str of strs) {
const m = /_([^.]+)\./.exec(str);
if (!m) {
console.log("no match: " + str);
continue;
}
console.log("match: " + m[1]);
}
答案 2 :(得分:1)
如果它们不提供最终的正则表达式风格,请不要使用正则表达式生成器,因为风格语法和功能可能彼此不同。你基本上是这样做的:
_[^.]+
只有一个区别,它与前面的_
字符匹配,以后你可以在JS中解决它。
var text = `MTxoZbRRUu9BfQLvAWwP_Bruntwood Leeds Digital Festival ad.pdf
bbZRU3329BfXXvvAWwP_short-video.mp4
zQZFnWVcRUbFNGyGdIP0_MGI-Artificial-Intelligence-Discussion-slides`;
console.log(
text.match(/_[^.]+/g).map(v => v.substr(1))
);
答案 3 :(得分:0)
对于这些示例字符串,您可以拆分点和下划线[._]
这会给你一个包含3个部分的数组。您要查找的值位于第二部分[1]
:
const strings = [
"MTxoZbRRUu9BfQLvAWwP_Bruntwood Leeds Digital Festival ad.pdf",
"bbZRU3329BfXXvvAWwP_short-video.mp4",
"zQZFnWVcRUbFNGyGdIP0_MGI-Artificial-Intelligence-Discussion-slides.pptx"
];
strings.forEach((s) => console.log(s.split(/[_.]/)[1]));