说我有这个:
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
//Fill your array, let's say it's called firebaseArray. I would recommend doing so in the view controller and not in the Appdelegate for better responsibility distribution in your code
let vc = YourViewController()
//And YourViewController must have a array property
vc.array = firebaseArray
window = UIWindow(frame: UIScreen.main.bounds)
//make your vc the root view view controller
window?.rootViewController = vc
window?.makeKeyAndVisible()
return true
}
结果是:
console.log(new RegExp('.git'));
console.log(new RegExp('scripts/npm'));
我的问题是-为什么它会在scripts / npm中转义斜线,但不会转义。在.git中?押韵的原因是什么?
注意,在这种情况下,正则表达式字符串是从命令行传递的,因此我需要使用RegExp将它们转换为正则表达式。
答案 0 :(得分:4)
未转义的/
表示正则表达式的开始和结束。当将包含/
的字符串传递到构造函数中时,当然/
是正则表达式的 part ,而不是表示开始或结束的符号。
.
完全是另外一回事,没有任何内容可用于RE分隔符,因此按原样保留。
请注意,如果希望正则表达式匹配 literal 点(而不是任何字符),则在使用构造函数时需要对其进行两次转义:
console.log(new RegExp('\\.git'));
答案 1 :(得分:1)
在JS中编写正则表达式时,可以使用两个/
初始化正则表达式字符串。这称为正则表达式文字初始化。有关here的更多信息。
例如
let re = /(\w+)\s(\w+)/;
现在,对于为什么将\
附加在/
之前的问题,这完全是由于RegExp
处理传递的字符串文字的方式所致。这样可以防止传递的字符串损坏,确保所有传递的字符都得到考虑。
此外,如果您检查RegExp
返回的对象,我们可以看到实际的源属性设置为scripts\\/npm
。因此,第一个\
表示第二个\
的字面意义。从正则表达式的角度\
来看,它只是逃避了后续的/
来形成正则表达式的文字符号。