如何在JavaScript中将变量传递给regExp对象并使其工作

时间:2017-03-23 17:13:37

标签: javascript regex match

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

var pattern = this.state.regExpVal;

我还有一个保存textInput值的变量,意思是一些文本,例如邮政编码。

var str = this.state.textAreaVal;

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

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

结果不行:(似乎全局的旗帜搜索无效,我无法弄清楚原因);

var result = str.match(myRegEx);

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

let reg = new RegExp("super", 'g');
"SOsuperISsuper!".match(reg);

结果是一个带有2个元素的数组[“super”,“super”]如预期的那样。

我认为问题出在this undefined nulllet myObject = { state: { regExpVal: "super" } } let reg = new RegExp(myObject.state.regExpVal, 'g'); "SOsuperISsuper!".match(reg); 值或意义上(尝试包含'i')

编辑:

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

编辑2:

let sortedContacts = contactData.sorted(by: { $0.name < $1.name }) // sort the Array first.
print(sortedContacts)

let groupedContacts = sortedContacts.reduce([[Contact]]()) {
    guard var last = $0.last else { return [[$1]] }
    var collection = $0
    if last.first!.name.characters.first == $1.name.characters.first {
        last += [$1]
        collection[collection.count - 1] = last
    } else {
        collection += [[$1]]
    }
    return collection
}
print(groupedContacts)

答案 1 :(得分:0)

我认为提供一些具体的例子对你有好处。如果没有这样的话,很难提供帮助。但是,我可以提供一个如何从变量构造正则表达式的示例。

让我们假设您希望构建“动态”正则表达式匹配模式的变量是

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"]