1

Тема: JS: Как передать в регулярное выражение переменную.

необходимо примерно такое:

var ipArr = ip.match(/192.168.0.\d{1,3}/g);

вопрос: каким образом записать часть или всё рег. выражение в виде переменной, чтобы впоследствии подставить в метод match?
неработающий пример:

var strMask = "192.168.0.";
var strReg = "/" + strMask + "\\d{1,3}/g";
var ipArr = ip.match(strReg);

2

Re: JS: Как передать в регулярное выражение переменную.

Наверно, так (но не проверял):


var strMask = "192.168.0.";
var objReg = new RegExp(strMask + "\\d{1,3}", "g");
var ipArr = ip.match(objReg);

3

Re: JS: Как передать в регулярное выражение переменную.

YMP
спасибо, работает.

4

Re: JS: Как передать в регулярное выражение переменную.

Ещё небольшое добавление.  Когда исп. регулярку в виде:

 var strMask = "192.168.0.", objReg = new RegExp(strMask + "\\d{1,3}", "g");

то скрипт не отрабатывал некоторые адреса, т.е. такой код: 

if(objReg.test($ip) == true)

возвращал как бы false(?!), где $ip - это массив ip-адресов полученный с адаптера. Но такой результат никак невозможен.
При этом если регулярка была в виде:

if(/192.168.0.\d{1,3}/g.test($ip) == true)

то всё отрабатывало нормально. Добавил для промежуточного просмотра строки:

WScript.Echo("Массив ip-адресов: " + $ip);
if(objReg.test($ip) == true)
WScript.Echo("успешно прошла проверка массива ip-адресов");	

и всё стало работать правильно. Так и не понял... такое впечатление, что скрипт не ожидая отработки предыдущей команды переходил к последующей.
Как такое возможно?!

5

Re: JS: Как передать в регулярное выражение переменную.

Регулярные выражения работают со строкой, а не с массивом строк. Возможно, что

массив ip-адресов полученный с адаптера

, на самом деле объект JScript (коллекция или что-то еще), но совсем не массив.

( 2 * b ) || ! ( 2 * b )

6

Re: JS: Как передать в регулярное выражение переменную.

Rumata
так получаю $ip:

var $ip = en.item().IPAddress.toArray().join("; ");

Если отобразить переменную $ip, то будет примерно вот такая строка: "192.168.0.25; 192.168.1.25; 192.168.2.25", т.к. на адаптере прописано несколько IP-адресов.
С помощью регулярок хотел фильтровать данную строку. Передавать значение в рег. выражение при помощи переменной хотел, чтобы скрипт был "универсальным",
т.е. изменил значение подсети в начале скрипта и более нигде не смотрю, дальше (в рег. выражениях) меняется автоматом.

7

Re: JS: Как передать в регулярное выражение переменную.

im2002,
1) Для JS не обязательно создавать объект new RegExp. Поддержка регулярок в нём нативная.


var r = /192.168.0.\d{1,3}/g;

WScript.Echo(r.test('192.168.0.1'));
WScript.Echo(r.test('192.168.0.2555'));

WScript.Echo('192.168.0.1'.match(r));
WScript.Echo('192.168.0.2555'.match(r));

2) Перечитал Ваш последний пост несколько раз, но так и не понял, что в итоге нужно. Поясните пожалуйста примером исходных данных и результатов, что хотите получать и из чего.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

8

Re: JS: Как передать в регулярное выражение переменную.

Xameleon пишет:

im2002,
2) Перечитал Ваш последний пост несколько раз, но так и не понял, что в итоге нужно. Поясните пожалуйста примером исходных данных и результатов, что хотите получать и из чего.

Нужно передать в регулярное выражение переменную. Т.е. если у меня переменная net определена как

var net = "192.168.0.";

то в дальнейшем в скрипте рег. выражение принимало значение: /192.168.0.\d{1,3}/g и я не лазил по скрипту и вручную не менял его во всех местах где оно встречается...
Чтобы часть "192.168.0." попадала в регулярку из переменной net.
YMP мне подсказал, вроде всё работало, но когда стал применять, то увидел нестыковку, о чём написал в третьем посте...
Я бы весь сценарий выложил конечно, но он длинный, никто разбирать и тем более проверять не будет, хотя бы потому что нужна сеть...
Описал в точности то, с чем столкнулся.

9

Re: JS: Как передать в регулярное выражение переменную.

Xameleon пишет:

im2002,
1) Для JS не обязательно создавать объект new RegExp. Поддержка регулярок в нём нативная.


var r = /192.168.0.\d{1,3}/g;

RegExp — как раз родной конструктор регулярных выражений в JS. То, что ты предлагаешь — статический литерал рег. выражения, а требуется его создавать динамически (нет, ну можно было бы использовать eval()…).

10

Re: JS: Как передать в регулярное выражение переменную.

wisgest,  понял. Благодарю за разъяснение. Видимо пятый день нового года сказывается.

im2002, к сожалению без целикового кода мне сложно судить. Поэтому я и попросил пояснения входных и желаемых выходных данных. Если код на столько большой, может стоить поделить его на функции, тогда будет понятно, что в функцию передалось и что из неё должно вернуться ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !