【问题标题】:How to pass a variable into a regExp object in JavaScript and make it work如何将变量传递给 JavaScript 中的 regExp 对象并使其工作
【发布时间】:2017-03-23 17:13:36
【问题描述】:

我有一个我无法解决的问题。假设我有一个保持 regExp 模式的变量,由用户提供:

var pattern = this.state.regExpVal;

我还有一个变量来保存 textInput 的值,表示一些文本,例如邮政编码。

var str = this.state.textAreaVal;

我创建了一个新的 regExp 对象:

var myRegEx = new RegExp(pattern, 'g');

而且结果还不行:(好像全局的flag搜索不起作用,我也不知道为什么);

var result = str.match(myRegEx);

谁能帮忙?

【问题讨论】:

  • 有什么问题?
  • 什么是字符串,你正在尝试什么正则表达式?
  • 字符串和正则表达式都由用户提供。假设 var str='34-990' 和 regExp=\d{2}-\d{3} 的模式。

标签: javascript regex match


【解决方案1】:
let reg = new RegExp("super", 'g');
"SOsuperISsuper!".match(reg);

结果是一个包含 2 个元素 ["super","super"] 的数组,正如预期的那样。

我猜问题出在你的this 一些undefined null 值或大小写(尝试包含'i')

编辑:

let myObject = {
    state: {
     regExpVal: "super"
    }
}
let reg = new RegExp(myObject.state.regExpVal, 'g');
"SOsuperISsuper!".match(reg);

编辑 2:

let myObject = {
    state: {
     regExpVal: "super"
       }
   };
let pattern = myObject.state.regExpVal;
let reg = new RegExp(pattern, 'g');
"SOsuperISsuper!".match(reg);

【讨论】:

  • 谢谢,但我想知道是否可以选择将变量放入模式中。 var 模式 = this.state.regExpVal; var str = this.state.textAreaVal; var reg = new RegExp(pattern, 'g');-----在这里尝试 str.match(reg) 无法正常工作。 pattern 和 str 都是字符串。
  • 我想也许问题出在其他地方,因为我一直在尝试所有组合。感谢您的支持。
  • 你可以使用变量,但是如果你的值,谁提供模式变量,正在改变,你必须创建一个新的 RegEx 对象。
  • 插入调试器;声明并在运行时检查您的变量。 “this”对于初学者来说很棘手。
【解决方案2】:

我认为提供一些具体示例会对您有所帮助。如果没有这样的帮助,就很难提供帮助。不过,我可以提供一些示例,说明如何从变量构造正则表达式。

假设您希望从中构造“即时”正则表达式匹配模式的变量是

const someVar = 'LostInJavaScript';

使用Regular Expression 构造函数,正如您似乎正在使用的那样,是此处采用的必要方法。在构造函数中,我倾向于使用 ES2015 风格的字符串模板作为传递给它的第一个参数:

const regPattern = new RegExp(`${someVar}`, 'g');
// => /LostInJavaScript/g

应用相关/适当的String 方法(例如String#matchString#searchRegExp#testRegExp#exec)将这个动态创建的正则表达式传递给它。

const strInput = 'RegularExpressionsHaveMeLostInJavaScript...',
      matchedSubStr = strInput.match(regPattern);
// => ["LostInJavaScript"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多