كيفية تمرير تعبير عادي كمعلمة دالة

لماذا هذا يعود كاذب بدلا من الصحيح.

function doit(expression) {

    var regex = new RegExp(expression, 'g');

    alert(regex.test('[email protected]'));
}

doit("/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/");
​

http://jsfiddle.net/hAV8Q/

0
لا يعمل لأن جديد RegExp لا يتوقع سلاسل محجوزة بشرائط مائلة؛ الأحرف الأولى والأخيرة هي جزء من نمط regex الحرفي.
وأضاف المؤلف apsillers, مصدر

2 إجابة

لأنه عند إنشاء regex مع جديد RegExp() ، لا تستخدم المحددات. قم بإزالة / من قبل وبعد السلسلة.

بدلاً من ذلك ، قم بتمرير regex نفسه عن طريق إزالة علامات الاقتباس قبل وبعد ، واترك استدعاء RegExp() الجديد.

0
وأضاف

إما تنسيق التعبير الخاص بك بشكل صحيح:

function doit(expression) {
    var regex = new RegExp(expression, 'g');
    alert(regex.test('[email protected]'));
}

doit("^\\w+([-+.\\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
// no/here, escape \

أو تمرير التعبير مباشرة:

function doit(expression) {
    alert(expression.test('[email protected]'));
}

doit(/^\w+([-+.\']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/g);


لا تعتبر المائلة (/) جزءًا من التعبير ، بل تشير إلى التعبير العادي . إذا استخدمت سلسلة تحتوي على التعبير ، يجب عليك حذفها والخروج من كل خط مائل عكسي لأن الخط المائل العكسي هو حرف الهروب في السلاسل أيضًا.

0
وأضاف
لأن مائل هو حرف الهروب في سلاسل، تحتاج إلى الهروب كل الخطوط المائلة العكسية، على سبيل المثال، <�رمز> \\ ث </القانون> بدلا من <�كود> \ ث </القانون>. وكنت قد كود أنظف بكثير إذا كنت مجرد تزويد كائن REGEXP الفعلي بدلا من سلسلة، كما هو الحال في الخيار الثاني في هذه الإجابة.
وأضاف المؤلف apsillers, مصدر
صحيح ، لقد نسيت أن أهرب من الخط المائل للخلف ... لهذا السبب أتجنب استخدام regex كسلسلة ؛)
وأضاف المؤلف Felix Kling, مصدر
RegisteredUser: عندما يكون لديك خطوط مائلة عكسية في سلسلة يجب عليك الهروب منها: jsfiddle.net/Guffa/hAV8Q/4
وأضاف المؤلف Guffa, مصدر