如何在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"; /

我有一个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"; // 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为什么?你能解释一下吗:?数组操作通常比字符串操作慢。不太确定正则表达式在那个尺度上的分数,但简单的字符串操作非常快。阵列的开销较大。在这种情况下,这并不重要,但在项目规模上,它会累积起来