如何在javascript中使用正则表达式提取破折号之间的字符串?
我有一个javascript字符串:如何在javascript中使用正则表达式提取破折号之间的字符串?,javascript,regex,string,Javascript,Regex,String,我有一个javascript字符串: const str = "bugfix/SOME-9234-add-company"; // output should be SOME-9234 const str2 = "SOME/SOME-933234-add-company"; // output should be SOME-933234 const str3 = "test/SOME-5559234-add-company"; /
const str = "bugfix/SOME-9234-add-company"; // output should be SOME-9234
const str2 = "SOME/SOME-933234-add-company"; // output should be SOME-933234
const str3 = "test/SOME-5559234-add-company"; // output should be SOME-5559234
我想提取一些-。。直到第一个字符
我使用这个正则表达式,但不起作用。什么是正确的正则表达式
const s = "bugfix/SOME-9234-add-company";
const r1 = s.match(/SOME-([1-9])/);
const r2 = s.match(/SOME-(.*)/);
const r3 = s.match(/SOME-(.*)-$/);
console.log({ r1, r2, r3 });
/一些-[^-]+/应该可以很好地工作。捕捉每一件事,在某些事情之后不是连字符-
或者,如果您知道您只有数字,请接近您尝试的数字:
/一些-[1-9]+/
您缺少一个+以获取多个字符
我还更改了括号,以准确捕捉您在问题中显示的内容,即,包括带有SOME/SOME-[^-]+/的部分应该可以很好地工作。捕捉每一件事,在某些事情之后不是连字符-
或者,如果您知道您只有数字,请接近您尝试的数字:
/一些-[1-9]+/
您缺少一个+以获取多个字符
我还更改了括号,以准确捕捉您在问题中显示的内容,即,包括带有一些的部分
const s=bugfix/SOME-9234-add-company;
//这是一个接近,但将只返回数字
console.log s.match/SOME-[1-9]/;
//你想要的是:
console.log s.match/SOME-[1-9]+/;//请注意+,表示“1或更多”
//这些也很接近。
//这会给你“一些”之后的一切:
console.log s.match/SOME-.*/;
//如果行的最后一个字符是-
console.log s.match/SOME-.*-$/;
//你想要的是:
console.log s.match/SOME-.*?-/;//不是线的尽头,而是“脱口而出”?哪一个是“直到第一次遇到你”
//除了使用[1-9]之外,您还可以使用\d数字来提高可读性:
console.log s.match/SOME-\d+/
const s=bugfix/SOME-9234-add-company;
//这是一个接近,但将只返回数字
console.log s.match/SOME-[1-9]/;
//你想要的是:
console.log s.match/SOME-[1-9]+/;//请注意+,表示“1或更多”
//这些也很接近。
//这会给你“一些”之后的一切:
console.log s.match/SOME-.*/;
//如果行的最后一个字符是-
console.log s.match/SOME-.*-$/;
//你想要的是:
console.log s.match/SOME-.*?-/;//不是线的尽头,而是“脱口而出”?哪一个是“直到第一次遇到你”
//除了使用[1-9]之外,您还可以使用\d数字来提高可读性:
console.log s.match/SOME-\d+/ 您可以使用/SOME-[\d]+/g正则表达式,例如
常量字符串=[
bugfix/SOME-9234-add-company,//输出应该是SOME-9234
SOME/SOME-933234-add-company,//输出应该是SOME-933234
test/SOME-5559234-add-company//输出应为SOME-5559234
];
strings.forEachstring=>{
const regex=/SOME-[\d]+/g;
const found=string.matchregex;
console.logfound[0];
}; 您可以使用/SOME-[\d]+/g正则表达式,例如
常量字符串=[
bugfix/SOME-9234-add-company,//输出应该是SOME-9234
SOME/SOME-933234-add-company,//输出应该是SOME-933234
test/SOME-5559234-add-company//输出应为SOME-5559234
];
strings.forEachstring=>{
const regex=/SOME-[\d]+/g;
const found=string.matchregex;
console.logfound[0];
}; 如果您不想使用正则表达式,那么这可能很简单
const s = "bugfix/SOME-9234-add-company";
const str2 = "SOME/SOME-933234-add-company";
const str3 = "test/SOME-5559234-add-company";
const r1 = s.split("/")[1].split("-",2).join("-"); // "SOME-9234"
const r2 = str2.split("/")[1].split("-",2).join("-"); // "SOME-933234"
const r3 = str3.split("/")[1].split("-",2).join("-"); // "SOME-5559234"
如果您不想使用正则表达式,那么这可能很简单
const s = "bugfix/SOME-9234-add-company";
const str2 = "SOME/SOME-933234-add-company";
const str3 = "test/SOME-5559234-add-company";
const r1 = s.split("/")[1].split("-",2).join("-"); // "SOME-9234"
const r2 = str2.split("/")[1].split("-",2).join("-"); // "SOME-933234"
const r3 = str3.split("/")[1].split("-",2).join("-"); // "SOME-5559234"
在您尝试的模式中: $断言字符串的结尾, [1-9]匹配不带0的单个数字1-9 .*将匹配任何不带换行符的字符0+次 无需捕获组,您可以匹配:
\bSOME-\d+
见
请注意,这将返回一个数组,您可以从中获取0索引
[
修正错误/SOME-9234-add-company,
SOME/SOME-933234-add-company,
测试/SOME-5559234-add-company
].forEachs=>console.logs.match/\bSOME-\d+/[0] 在您尝试的模式中: $断言字符串的结尾, [1-9]匹配不带0的单个数字1-9 .*将匹配任何不带换行符的字符0+次 无需捕获组,您可以匹配:
\bSOME-\d+
见
请注意,这将返回一个数组,您可以从中获取0索引
[
修正错误/SOME-9234-add-company,
SOME/SOME-933234-add-company,
测试/SOME-5559234-add-company
].forEachs=>console.logs.match/\bSOME-\d+/[0];在这些工作中,对字符串使用数组操作通常是您不想做的事情:@Martijn为什么?你能解释一下吗:?数组操作通常比字符串操作慢。不太确定正则表达式在那个尺度上的分数,但简单的字符串操作非常快。阵列的开销较大。在这种情况下,这并不重要,但在项目规模上,它增加了这些工作,而在字符串上使用数组操作通常是您不想做的事情:@Martijn为什么?你能解释一下吗:?数组操作通常比字符串操作慢。不太确定正则表达式在那个尺度上的分数,但简单的字符串操作非常快。阵列的开销较大。在这种情况下,这并不重要,但在项目规模上,它会累积起来