2016-02-18 1 views
0

У меня есть две строки, program_CRID: «3333313231323132» и series_CRID: «31323132».Как я могу получить одно совпадение с RegEx от начала строки

Программа_CRID создана с тремя сегментами следующим образом: «random_numbers» + «series_CRID» + «episode». Для примера, для program_CRID над ней:

  • random_numbers = 3333
  • series_CRID = 31323132
  • эпизод = 3132

Итак, я хочу, чтобы вычесть random_numbers и series_CRID из program_CRID и только держите эпизод. Обратите внимание, что длина трех сегментов изменяется.

// 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 совпадает с концом серии_CRID. Пожалуйста помоги.

Кроме того, это мое первое сообщение, поэтому, пожалуйста, будьте нежны.

Вопрос с бонусом: Почему я должен добавить дополнительный \ перед \ d *, чтобы заставить его работать? Согласно документу, я прочитал \ d *, должно быть достаточно. Заранее спасибо.

+0

Если длина всех трех может варьироваться, и все они одинаковы, и нет ничего, что бы их разделило, какова была бы ваша логика, чтобы как-то рассказать им обособленно? Это кажется совершенно невозможным. – adeneo

+0

series_CRID всегда будет частью program_CRID и разделяет random_numbers и эпизод –

ответ

1

Попробуйте это: (?! $)

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

Лишний гарантирует, что шаблон согласования не будет в конце строки так повторяющейся строки, которая следует за series_crid не будет соответствовать.

Также вы добавили дополнительную косую черту, чтобы избежать части косой черты селектора цифр \ d.

+0

Спасибо @nanestev, который работал как шарм. Я совершенно новый в этом, и я узнаю что-то новое каждый день. Еще раз спасибо. –

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

если число первых цифр определяется.

+0

Спасибо, он работал, но random_numbers не всегда 4 цифры, поэтому он, к сожалению, не будет работать для всех случаев. –

Смежные вопросы