我正在设计 HTML 和 JavaScript 中的正则表达式测试人员。用户将输入正则表达式字符串,并通过单选按钮选择他们想要测试 (如搜索、 匹配、 替换等) 的函数,该函数使用指定的参数运行时,程序将显示结果。很自然地会有额外额外的参数替换和文本框等。

我的问题是获取来自用户的字符串,并将其转变为一个正则表达式。如果我说他们不需要有//的周围正则表达式输入,则它们不能设置标志,例如gi因此他们需要具备//的表达式,但如何才能将该字符串转换为正则表达式吗?由于它是一个字符串,并且我不能把它传递给 RegExp 构造函数以来它不,它不能是文本字符串,而无需//' s。是否有任何其他方式来使用户输入的字符串的正则表达式?将需要分析的字符串和标志使用 regex 的//的构造该另一种方法?我应该有这些输入字符串,然后分别输入标志吗?

2009-05-17 14:20:18
问题评论:

回答:

使用该RegExp 对象构造函数根据字符串创建一个正则表达式︰

var re = new RegExp("a|b", "i");
// same as
var re = /a|b/i;

会很棒的输入字段与在线工具

当执行它通过这种方式,您必须将反斜杠转义,如var re = new RegExp("w+");

很好的答案,帮助了很多。

@holms regexr.com是炸弹 diggity

@holms regex101.com是一个很棒的 regex 在线工具以及

var flags = inputstring.replace(/.*/([gimy]*)$/, '$1');
var pattern = inputstring.replace(new RegExp('^/(.*?)/'+flags+'$'), '$1');
var regex = new RegExp(pattern, flags);

var match = inputstring.match(new RegExp('^/(.*?)/([gimy]*)$'));
// sanity check here
var regex = new RegExp(match[1], match[2]);

您应该考虑输入无效,如//被识别。

或者让 RegExp 构造函数失败,"尾随在正则表达式",而不是编写复杂的解析器。

@Anonymous,+ 1。这是真正好的通用答案。提取此出表示感谢。非常有帮助。

我是 99%确定的它应该是︰ var regex = 新 RegExp ([1] 的匹配,match[2]);

@qbolec + 1。应为 ([1] 的匹配,match[2]),因为匹配 [0] 是匹配的输入。此外 (g? 我? m? y?)-是错误的如捕捉只与明确标志订单 regexps。它不能识别 /。 / ig'。我更愿意使用 / ^ /(.*?)/ ([gim] *) $/-更正确。

使用JavaScript RegExp 对象构造函数.

var re = new RegExp("w+");
re.test("hello");

可以将标记作为第二个字符串的构造函数的参数。请参阅详细信息的文档。

在我的示例用户输入的 somethimes 是 sorrounded 由分隔符,有时没有。因此,我将添加另一种情况.

var regParts = inputstring.match(/^/(.*?)/([gim]*)$/);
if (regParts) {
    // the parsed pattern had delimiters and modifiers. handle them. 
    var regexp = new RegExp(regParts[1], regParts[2]);
} else {
    // we got pattern string without delimiters
    var regexp = new RegExp(inputstring);
}

始终可以使用.split()函数,而不是一个长的正则表达式的字符串。regParts = inputstring.split('/')这使得regParts[1]的正则表达式字符串和regParts[2]的分隔符 (假定的正则表达式设置为/.../gim)。您可以检查是否有regParts[2].length < 0 0 分隔符.

我建议您还可以添加单独的复选框或特殊标志的文本字段。通过这种方式,这也就是用户不需要添加任何//' s。在替换的情况下提供两个textfields。这将使您的生活容易得多。

为什么?由于有些用户将添加//未在其他将的。和一些会使语法错误。然后,在您去除//的则可能最终会与语法上有效的正则表达式,觉得没有什么比用户的预期,导致出现奇怪的行为 (从用户的角度)。

请输入您的翻译

Converting user input string to regular expression

确认取消