【问题标题】:Convert a string into a regular expression [duplicate]将字符串转换为正则表达式[重复]
【发布时间】:2013-06-09 12:40:13
【问题描述】:

我正在使用 Jacob Wright 的名为 "array-query" 的非常好的 JavaScript 库来搜索对象数组。

一种方法是regex(),其中正则表达式可以包含在括号中,如下所示:regex(/[^\w\s]/)。如果我像我刚刚展示的那样对表达式进行硬编码,它就可以正常工作。如果我先将相同的表达式放入变量中,则它不起作用,如下所示:

var reg = "/[^\w\s]/"; 
regex(reg);

有人告诉我

你在你的正则表达式周围加上引号,使它成为一个字符串。删除引号。

因此

var reg = /[^\w\s]/; 
regex(reg);

工作正常。

问题是我需要接受来自文本框的用户输入作为正则表达式的一部分。例如,如果用户输入字母z,则需要将其更改为/z/。即使我输入/z/,返回的textbox.value 也有与var reg = "/z/" 相同的问题。如果我对var reg = /z/; regex(reg); 进行硬编码,它可以正常工作。

如何将"z" 的输入文本框值转换为var reg = z; 的表单? 非常感谢任何帮助或想法,希望这不会太混乱。

【问题讨论】:

标签: javascript string textinput


【解决方案1】:

你应该这样做

var regex = new RegExp('your regex string');

基本上可以想到

var regex = /pattern/modifiers;

作为

var regex = new RegExp(pattern,modifiers);

了解更多信息:MDNw3schools

【讨论】:

    【解决方案2】:
    var reg = new RegExp("string");
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      var string = $('#input_id').val();
      string = string.replace('/', '');
      
      var regexpPattern = '/'+string+'/';
      regex(regexpPattern);
      

      【讨论】:

      • regex 需要 RegExp 对象,而不是字符串。
      • 那是非常错误的。 "/foo/" 是一个字符串,而 /foo/ 是一个正则表达式文字。 OP甚至在问题中提到,您阅读了吗?
      • 我没有包含任何双引号。我刚刚将斜杠与通过输入框捕获的文本连接起来。你仔细阅读我的代码了吗?
      • 您可以将其更改为 RegExp 对象,例如: var reg = new RegExp('/'+string+'/');
      • 使用单引号还是双引号都没有关系。两者都表示一个字符串。如果您更喜欢,我也可以写'/foo/'。是的,在这里将值传递给RegExp 是必要的,这就是实际的解决方案! 但是包括斜线是错误的。正确的解决方案是regex(new RegExp(string))。否则,只有当值字面上包含 / 时,正则表达式才会匹配。
      猜你喜欢
      • 2019-11-24
      • 1970-01-01
      • 2012-01-28
      • 2022-11-18
      • 2023-03-11
      • 2015-04-13
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多