我正在设计一个HTML和JavaScript的正则表达式测试程序 . 用户将输入正则表达式,字符串,并通过单选按钮选择他们想要测试的功能(例如搜索,匹配,替换等),程序将在使用指定参数运行该功能时显示结果 . 当然会有额外的文本框用于替换等额外的参数 .
我的问题是从用户获取字符串并将其转换为正则表达式 . 如果我说他们不需要设置标志,例如 g
和 i
. 所以他们必须让 //
's around the expression, but how can I convert that string to a regex? It can'是一个文字,因为它是一个字符串,我不能将它传递给RegExp构造函数,因为它不是没有 //
的字符串 . 有没有其他方法可以将用户输入字符串转换为正则表达式?我是否必须使用 //
解析正则表达式的字符串和标志然后以另一种方式构造它?我应该让他们输入一个字符串,然后单独输入标志吗?
9 回答
由于早期的答案,这个块可以作为将可配置字符串应用于RegEx ...以过滤文本的通用解决方案:
使用RegExp object constructor从字符串创建正则表达式:
要么
使用JavaScript RegExp object constructor .
您可以将标志作为第二个字符串参数传递给构造函数 . 有关详细信息,请参阅文档
这是一个单行:
str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&')
我是从escape-string-regexp NPM模块得到的 .
尝试一下:
在我的情况下,用户输入的somethimes被分隔符所束缚,有时则不然 . 因此我添加了另一个案例..
我建议你也为特殊标志添加单独的复选框或文本字段 . 这样很明显,用户不需要添加任何
//
. 在替换的情况下,提供两个文本字段 . 这将使您的生活更轻松 .为什么?因为否则一些用户会添加
//
而其他用户则不会 . 有些人会出现语法错误 . 然后,在你剥离了//
's, you may end up with a syntactically valid regex that is nothing like what the user intended, leading to strange behaviour (from the user'的观点之后) .当字符串无效或不包含标志等时,这也会起作用:
您可以使用复选框请求标志,然后执行以下操作: