Вставка переменных в строку регулярного выражения

#javascript #regex

#javascript #регулярное выражение

Вопрос:

Я нашел много вопросов в StackOverflow о том, как это сделать, но у меня это просто не работает.

 var username = "abcdefg";
var min_length = 3;
var max_length = 24;
var regex = new RegExp('^[w.-]{'   min_length   ','   max_length   '}

Я также пробовал использовать косые черты до и после:

 new RegExp('/^[w.-]{'   min_length   ','   max_length   '}$/')
 

И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:

 new RegExp(/^[w.-]{3,24}$/)
 

jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:

 new RegExp('^[\w.-]{'   min_length   ','   max_length   '}

Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ


Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:

 new RegExp('^[\w.-]{'   min_length   ','   max_length   '}


Комментарии:

1. Спасибо, но Ориол вас опередил :)

Ответ №3:

Это может помочь

 var username = "abcdefg";
var min_length = 3;
var max_length = 24;
var str1='^[\w.-]{' min_length ',' max_length '}

http://jsfiddle.net/Et7J8/



);
if (regex.test(username))
document.getElementById('status').innerHTML = 'match';
else
document.getElementById('status').innerHTML = 'no match';
Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);

Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById('status').innerHTML = 'match';
else
document.getElementById('status').innerHTML = 'no match';

Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

)

Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;

Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

;
var regex = new RegExp(str1,«i»);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;

http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;

Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

)

Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);

Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/

);
if (regex.test(username))
document.getElementById(‘status’).innerHTML = ‘match’;
else
document.getElementById(‘status’).innerHTML = ‘no match’;

Я также пробовал использовать косые черты до и после:


И я также пробовал использовать двойные кавычки вместо одинарных кавычек (не уверен, что регулярное выражение рассматривает одинарные кавычки как зарезервированные или что-то в этом роде).

Если я уберу кавычки и введу числа для переменных, все будет работать нормально:


jsFiddle:
http://jsfiddle.net/88ef3 /

Комментарии:

1. И вы уверены, что это сработает, если вместо этого просто ввести числа?

2. Проверьте это: jsfiddle.net/88ef3/1

3. вы включаете / в свой шаблон в jsfiddle

4. да, но я пробовал это с и без

5. посмотрите здесь jsfiddle.net/Yp4sp

Ответ №1:

Когда вы используете RegExp конструктор для построения регулярного выражения из строки, вы должны избегать косых черт:


Помните, что косая черта в строке javascript используется для экранирования, но здесь вам нужен slah в качестве символа, поэтому вы должны экранировать себя.

ДЕМОНСТРАЦИЯ

Комментарии:

1. Это сделало это! Спасибо. Я приму это по истечении 10-минутного периода.

2. @Gavin также обратите внимание на другие комментарии, которые вы не используете / в RegExp конструкторе, потому / что это разделитель для литералов регулярных выражений.

3. Это то, что я понял, я просто не мог понять, почему это не работает, поэтому я перепробовал все, что мог придумать.

Ответ №2:


Комментарии:

1. Спасибо, но Ориол вас опередил 🙂

Ответ №3:

Это может помочь


http://jsfiddle.net/Et7J8/