正则表达式 - 在最后一个连字符/破折号之前提取文本

Example data                         expected output   


sds-rwewr-dddd-cash0-bbb              cash0

rrse-cash1-nonre                      cash1

loan-snk-cash2-ssdd                   cash2

garb-cash3-dfgfd                      cash3

loan-unwan-cash4-something            cash4

通用模式在这里,需要在给定字符串的最后一个连字符之前提取几个字符。


var regex1= /.*(?=(?:-[^-]*){1}$)/g ;       //output will be "ds-rwewr-dddd-cash0" from "sds-rwewr-dddd-cash0-bbb  "

var regex2 = /\w[^-]*$/g ;       //output will be "cash0" from "ds-rwewr-dddd-cash0"

var res =regex2.exec(regex1.exec(sds-rwewr-dddd-cash0-bbb)) //output will cash0

虽然上面嵌套的正则表达式按预期工作但可能不是优化的。因此,对于优化正则表达式的任何帮助将不胜感激


慕少森
浏览 126回答 1
1回答

慕盖茨4494581

您可以使用/\w+(?=-[^-]*$)/如果最后一个连字符之前的部分可以包含除单词字符之外的字符,请继续使用\w[^-]*: /\w[^-]*(?=-[^-]*$)/。如果您不需要检查匹配项的第一个字符,只需使用/[^-]+(?=-[^-]*$)/.细节:\w+- 一个或多个单词字符(?=-[^-]*$)- 必须跟在后面-,然后是零个或多个字符,直到-字符串结尾。JavaScript 演示const texts = ['sds-rwewr-dddd-cash0-bbb','rrse-cash1-nonre','loan-snk-cash2-ssdd','garb-cash3-dfgfd','loan-unwan-cash4-something'];const regex = /\w+(?=-[^-]*$)/;for (var text of texts) {  console.log(text, '=>', text.match(regex)?.[0]);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript