在 javascript 中将正则表达式字符串转换为正则表达式不同
Different in Convert Regular Expression String to RegExp in Javascript
为什么我在对象正则表达式中围绕测试函数的代码与正则表达式模式的工作方式不同。我是否遗漏了某些内容,或者我是否使用了错误的转义正则表达式
<html>
<body>
<script type="text/javascript">
var str = "info@test.com";
//This isn't working
var regStr = "^(['w-]+(?:'.['w-]+)*)@((?:['w-]+'.)*'w['w-]{0,66})'.([a-z]{2,6}(?:'.[a-z]{2})?)$"; //This string can be any regex get from XSLT
//Escape function get from: http://stackoverflow.com/a/6969486/193850
regStr = regStr.replace(/['-'[']'/'{'}'(')'*'+'?'.'''^'$'|]/g, "''$&");
console.log(regStr); // '^'('[w'-']'+'('?:'.'[w'-']'+')'*')@'('('?:'[w'-']'+'.')'*w'[w'-']'{0,66'}')'.'('[a'-z']'{2,6'}'('?:'.'[a'-z']'{2'}')'?')'$
var re = new RegExp(regStr , "i");
console.log(re.test(str)); //false
var filter=/^(['w-]+(?:'.['w-]+)*)@((?:['w-]+'.)*'w['w-]{0,66})'.([a-z]{2,6}(?:'.[a-z]{2})?)$/i
console.log(filter.test(str)); //true
</script>
</body>
</html>
当您将正则表达式编写为字符串时,您必须加倍反斜杠。
为什么? 字符串文字语法还遵守其自己的反斜杠引号约定,例如引号字符、换行符等。 因此,当 JavaScript 解析包含正则表达式的字符串常量时,反斜杠将消失。因此,您需要用另一个反斜杠引出它们,以便在将字符串传递给 RegExp 构造函数时,它会看到您实际想要的正则表达式。
看,有一个混乱。您使用的函数是预处理字符串正则表达式的好方法,因此您不必担心转义正则表达式元字符 - 即控制正则表达式行为的符号,而不仅仅是字面意思。
但关键是你的字符串在被这个转义函数获取之前已经被解析了:'w
和'.
序列分别变得只有w
和.
,前面的斜杠丢失了。
对于表 2.1 中未列出的字符,前面的反斜杠为 忽略,但此用法已弃用,应避免使用。
实际上,逃逸器功能确实在.
之前恢复了斜杠,但w
对它来说并不特别。因此,进入 RegExp 构造函数的字符串具有 [w]
而不是 ['w]
。
实际上很容易检查:只需在更换操作后console.log(regStr)
即可。
相关文章:
- 将po-box javascript正则表达式转换为c#regex
- 将 Javascript 正则表达式转换为 PHP
- 在 JavaScript 中使用 parseFloat() 或 parseInt() 和正则表达式(转换 CSV 文件)
- 将PHP中的正则表达式转换为javascript
- 将正则表达式转换为PHP
- 将 JavaScript 正则表达式转换为 asp.net vb
- 如何将 Php 正则表达式转换为 js
- 将 php 正则表达式转换为 javascript
- 如何将这个PHP正则表达式转换为JS
- 如何即时将字符串编码的 PHP 正则表达式转换为 JS 正则表达式
- 将正则表达式转换为在 JavaScript 中使用的表达式
- 使用正则表达式转换 JSON 密钥值
- 如何将 PCRE 正则表达式转换为 PHP
- 如何使用正则表达式转换多个字符
- 如何将此PHP正则表达式转换为Javascript正则表达式
- 将这个php正则表达式转换为javascript
- 将C#正则表达式转换为JavaScript正则表达式
- 将 js 正则表达式转换为 Python 正则表达式
- 将c#正则表达式转换为javascript
- 如何将JavaScript正则表达式转换为Java