【问题标题】:Javascript Storing Regexp screws the original formatJavascript 存储正则表达式破坏了原始格式
【发布时间】:2016-08-17 18:41:20
【问题描述】:

我有一个 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);

【问题讨论】:

  • 从本地存储中检索后将字符串传递给 RegExp 构造函数:new RegExp('github\\.com\/([A-Za-z0-9\\-\\_]+)\/([A-Za-z0-9\\-\\_]+))

标签: regex stringify


【解决方案1】:

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

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

并通过RegExp 构造函数对其进行初始化,以便不必转义正则表达式分隔符/[] 中的点失去了它的特殊含义,只匹配文字点,字符类末尾的连字符只匹配文字连字符,_ 在模式中的任何地方都不需要转义:

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 构造函数一起使用。

【讨论】:

  • 解决这个特殊问题的技巧,但是有没有办法用\s 处理一般字符串? ://
猜你喜欢
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 2016-08-31
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2016-12-16
相关资源
最近更新 更多