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

program_CRID由三个段组成,如下所示:“ random_numbers” +“ series_CRID” +“ episode”。对于上面的program_CRID的示例是:


random_numbers = 3333
series_CRID = 31323132
集= 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”,还有很多其他的,但是都是徒劳的。我猜第二部分不起作用,因为该情节与series_CRID的结尾相同,为3132。请帮忙。

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

奖励问题:为什么必须在\ d *前面添加一个额外的\,以使其起作用?根据文档,我读过\ d *应该足够了。提前致谢。

最佳答案

尝试这个:

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


多余的(?!$)将确保匹配的模式不会出现在字符串的末尾,因此将不会匹配在series_crid之后的重复字符串。

另外,您还可以使用多余的正斜杠来避免数字选择器\ d的正斜杠部分。

07-26 09:29
查看更多