检查字符串是否以可能的值范围开头并提取匹配项

时间:2017-08-01 20:51:49

标签: regex bash

给出以下JavaScript代码:

const branch = 'PRODUCT-1234-foobar';
const match = (/^(?:product|core|shop)-\d+/i).exec(branch);
const name = match ? match[0] : 'unknown';

给定一个以PRODUCT-CORE-SHOP-开头且后跟至少一个数字的分支,这将为我提供分支名称的第一部分,在这种情况下PRODUCT-1234

我一直在尝试在Bash中做同样的事情,但我似乎无法使其发挥作用。我该怎么做?答案最好不区分大小写。

1 个答案:

答案 0 :(得分:2)

您可以使用shopt -s nocasematch使后续匹配大小写不敏感(请参阅this source)。

使用

shopt -s nocasematch
branch='PRODUCT-1234-foobar'
reg="^(product|core|shop)-[0-9]+"
if [[ $branch =~ $reg ]]; then
    echo ${BASH_REMATCH[0]};
fi

请参阅online demo

模式详情

  • ^ - 字符串开始
  • (product|core|shop) - 其中一个替代方案
  • - - 连字符
  • [0-9]+ - 一位或多位数。

${BASH_REMATCH[0]}代表整个匹配值。