我遇到了一个无法解决的问题。假设我有一个保持regExp模式的变量,该变量由用户提供:
var pattern = this.state.regExpVal;
我还有一个保存textInput值的变量,意思是一些文本,例如邮政编码。
var str = this.state.textAreaVal;
我创建了一个新的regExp对象:
var myRegEx = new RegExp(pattern, 'g');
结果不行:(似乎全局的旗帜搜索无效,我无法弄清楚原因);
var result = str.match(myRegEx);
有人可以帮忙吗?
答案 0 :(得分:1)
let reg = new RegExp("super", 'g');
"SOsuperISsuper!".match(reg);
结果是一个带有2个元素的数组[“super”,“super”]如预期的那样。
我认为问题出在this
undefined
或 null
个let 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#match
,String#search
,RegExp#test
,RegExp#exec
)传递这是动态创建的正则表达式。
const strInput = 'RegularExpressionsHaveMeLostInJavaScript...',
matchedSubStr = strInput.match(regPattern);
// => ["LostInJavaScript"]