如何从字符串的开头获得与RegEx的一个匹配项

时间:2016-02-18 23:34:29

标签: javascript regex

我有两个字符串,program_CRID:" 3333313231323132"和series_CRID:" 31323132"。

program_CRID由以下三段构成:" random_numbers" +" series_CRID" +" episode"。对于上面的program_CRID示例,它是:

  • random_numbers = 3333
  • series_CRID = 31323132
  • episode = 3132

所以,我想从program_CRID中减去random_numbers和series_CRID,只保留这一集。请注意,3段的长度各不相同。

// this snippet is working
var program_CRID = "3333373638353131";
var series_CRID = "3337363835";
var regex = new RegExp("\\d*" + series_CRID, "g");
var episode = program_CRID.replace(regex, "");
// result is 3131

// this one is not working
var program_CRID = "3333313231323132";
var series_CRID = "31323132";
var regex = new RegExp("\\d*" + series_CRID, "g");
var episode = program_CRID.replace(regex, "");
// result is null but should be 3132 (last four numbers of program_CRID)  

我试过在开头添加一个^,在正则表达式结尾添加$但没有运气。我试过删除" g"而且,其他很多但都是徒劳的。我猜第二部分不起作用,因为剧集是3132,与series_CRID的结尾相同。请帮忙。

另外,这是我的第一篇文章,所以请保持温和。

奖金问题:为什么我必须在\ d *前添加一个额外的\才能使其正常工作?根据文献记载,我读过\ d *应该就够了。提前谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

program_CRID = "3333313231323132"; var series_CRID = "31323132"; 
var regex = new RegExp("\\d*" + series_CRID + "(?!$)");
var episode = program_CRID.replace(regex, "");

额外的(?!$)将确保匹配模式不会在字符串的末尾,因此不会匹配在series_crid后面的重复字符串。

此外,您还可以使用额外的正斜杠来转义数字选择器的正斜杠部分\ d。

答案 1 :(得分:0)

您可以尝试:

var program_CRID = "3333313231323132";
var series_CRID = "31323132";
var regex = new RegExp("(?!\d*" + series_CRID + ")");
var episode = program_CRID.replace(regex, ""); 

var program_CRID = "3333313231323132";
var series_CRID = "31323132";
var regex = new RegExp("\\d{4}" + series_CRID, "g");

var episode = program_CRID.replace(regex, "");

如果定义了第一个数字的数字。