Javascript 存储 Regexp 破坏原始格式

Javascript Storing Regexp screws the original format

我有一个 angular 应用程序,用户可以在其中添加表单中的正则表达式,值如下:

github\.com/([A-Za-z0-9\-\_]+)/([A-Za-z0-9\-\_]+)

当我将其存储在 localStorage 中并检查 localStorage 时:

github\\.com\/([A-Za-z0-9\\-\\_]+)\/([A-Za-z0-9\\-\\_]+)

当我在 Javascript 其他地方检索这个值时,我得到:

github\.com\/([A-Za-z0-9\-\_]+)\/([A-Za-z0-9\-\_]+)

这不是原始的正则表达式,Javascript 中的 match 方法无法工作。

注意:提交表单后,我将对象存储为:

localStorage.myobject = JSON.stringify(myobject);

你可以在这里摆脱过度转义,只需使用

github[.]com/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)

并通过 RegExp 构造函数对其进行初始化,这样就不必转义正则表达式定界符 /[] 中的点失去其特殊意义,只匹配文字点,字符 class 末尾的连字符只匹配文字连字符,而 _ 不必是在模式中的任何地方都转义了:

var tst = "github.com/Test1-Text/Test2";
var pattern = "github[.]com/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)";
console.log(new RegExp(pattern).test(tst));

更新:

当使用来自外部源的模式时,您需要使用构造函数表示法。确保你的正则表达式模式存储为文字字符串(如果你有 RegExp("C:\\Folder"),确保它存储为 C:\Folder),并且在读取其中的值时将自动用于 RegExp构造函数。