正则表达式 - 无效的表达式错误“无需重复......”

时间:2018-04-08 13:35:50

标签: javascript regex

我正在尝试构建一个正则表达式来捕获我的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"

谢谢!

4 个答案:

答案 0 :(得分:3)

根据您的示例,您可以使用更简单的正则表达式:

&#13;
&#13;
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;
&#13;
&#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中解决它。

Live demo

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]));