繁体   English   中英

如何从字符串开头获取与RegEx的匹配

[英]How can I get one match with RegEx from start of string

我有两个字符串,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的正斜杠部分。

你可以试试:

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, "");

如果定义了第一位数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM