Игнорирование определенных символов в глобальном масштабе - PullRequest
0 голосов
/ 19 мая 2010

Учтите, что '_ в числе не меняет значение этого числа, поэтому 1000 == 1_000 == 10_00.

Проблема: данные числа, такие как 1_244_23 1412_2 1_1111 и т. Д., как я могу решить, появится ли определенное число в этой коллекции? Например: 1244_23 да, 11_111 да, 1412_1 нет.

Как можно использовать регулярные выражения для решения этой проблемы? Я имею в виду, если бы я мог сказать движку регулярных выражений просто игнорировать эти '_' при сопоставлении, тогда эта проблема становится тривиальной? Как я мог это сделать?

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Не делайте это более сложным, чем должно быть.

var baseStr = "1_244_23 1412_2 1_1111";
var testFor = "1244_23";

var contains = !!new RegExp("\\b" + testFor.replace(/_/g,"") + "\\b").exec(baseStr.replace(/_/g,""));
1 голос
/ 19 мая 2010

Вы можете сделать регулярное выражение, которое допускает подчеркивание в любой позиции:

var input = '1_244_23 1412_2 1_1111';
if (/(^|\s)1_?1_?1_?1_?1(\s|$)/.exec(input) != null) {
  ...
}

Если вы хотите создать регулярное выражение из строки:

var input = '1_244_23 1412_2 1_1111';
var number = '11_111';
var re = new Regex('(^|\s)'+number.replace(/_/g, '').replace(/\B(.)/g, '_?$1')+'(\s|$)');
if (re.exec(input) != null) {
  ...
}

Edit:

Я добавил (^ | \ s) и (\ s | $) к регулярным выражениям, чтобы они совпадали с началом и концом числа, чтобы число, подобное 111, не получило ложное положительное совпадение с 21113. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...