如何匹配`?`或`/`与正则表达式?

Moe*_*ler 0 javascript regex

我想在包含a ?或a的每个位置拆分一个字符串/.我对正则表达式不太熟悉,所以这给我带来了一些麻烦,因为我不知道在哪里和什么逃脱.它应该是这样的:

let uri = '/some/random/path?param=1234'
let arr = uri.split(/ ?|/ /);
Run Code Online (Sandbox Code Playgroud)

TMH*_*TMH 5

这样的事怎么样?

var uri = '/some/random/path?param=1234';
var split = uri.split(/([?\/])/);
console.log(split);
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/tomharto/0rjw01ch/


Wik*_*żew 5

虽然每个人都试图证明逃避是必要的,但是让我告诉你一种方法来避免逃避地狱:使用RegExp构造函数表示法,你可以避免逃脱/并在角色类中,你只需要逃避],有时候-.

var uri = '/some/random/path?param=1234'
var arr = uri.split(RegExp("[?/]"));
document.body.innerHTML = "<pre>" + JSON.stringify(arr, 0, 4) + "</pre>"; // with empty
document.body.innerHTML += "<pre>" + JSON.stringify(arr.filter(Boolean), 0, 4) + "</pre>"; // no empty
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要使用/g修饰符String#split(),它是默认行为.

关于JavaScript正则表达式模式转义的更多注意事项:

  • \ 必须永远逃脱
  • ? 必须在角色类之外转义
  • / 必须以字面正则表达式表示法转义
  • [ 必须在字符类之外进行转义
  • ] 必须在字符类中进行转义
  • +,*,(,),^,$,.必须在字符类的外部逃脱,没有一个字符类内进行转义.