我有一句话,以“ _h”开头和结尾。我想生成一个正则表达式,它可以在一个完整的字符串中捕获这种情况的多次出现。
我生成了一个正则表达式,看起来像这样的“ _h。 [a-zA-Z0-9]。 _h”。我想在JavaScript中添加一个“全局标志”,但找不到任何解决方案。
Input String: "_h Hello _h _h World _h"
Current output: Hello World
Expected output: [Hello, World]
答案 0 :(得分:0)
您可以执行以下操作:
let str = "_h Hello _h _h World _h"
let range = NSRange(str.startIndex..., in: str)
let regex = try! NSRegularExpression(pattern: "(?<=_h).+?(?=_h)")
let matches = regex.matches(in: str, range: range)
let results: [String] = matches.compactMap { match in
let subStr = String(str[Range(match.range, in: str)!]).trimmingCharacters(in: .whitespacesAndNewlines)
return subStr.isEmpty ? nil : subStr
}
print(results) //["Hello", "World"]
以下是正则表达式说明:
(?<=_h)
:_h
的正向后退(区分大小写); .+?
:匹配任意字符(行终止符除外),且在1到无限次之间匹配,并尽可能少地匹配,并根据需要扩展; (?=_h)
:_h
的正面正视(区分大小写)。 NB :构建subStr
时强制展开是安全的。