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
构造函数。
我有一个 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
构造函数。