RegExp构造函数转义斜杠字符,但不转点

时间:2018-09-01 22:59:11

标签: javascript node.js regex

说我有这个:

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将它们转换为正则表达式。

2 个答案:

答案 0 :(得分:4)

未转义的/表示正则表达式的开始和结束。当将包含/的字符串传递到构造函数中时,当然/是正则表达式的 part ,而不是表示开始或结束的符号。

.完全是另外一回事,没有任何内容可用于RE分隔符,因此按原样保留。

请注意,如果希望正则表达式匹配 literal 点(而不是任何字符),则在使用构造函数时需要对其进行两次转义:

console.log(new RegExp('\\.git'));

答案 1 :(得分:1)

在JS中编写正则表达式时,可以使用两个/初始化正则表达式字符串。这称为正则表达式文字初始化。有关here的更多信息。

例如

let re = /(\w+)\s(\w+)/;

现在,对于为什么将\附加在/之前的问题,这完全是由于RegExp处理传递的字符串文字的方式所致。这样可以防止传递的字符串损坏,确保所有传递的字符都得到考虑。 此外,如果您检查RegExp返回的对象,我们可以看到实际的源属性设置为scripts\\/npm。因此,第一个\表示第二个\的字面意义。从正则表达式的角度\来看,它只是逃避了后续的/来形成正则表达式的文字符号。