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

时间:2016-01-12 11:38:00

标签: javascript regex

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

let uri = '/some/random/path?param=1234'
let arr = uri.split(/ ?|/ /);

5 个答案:

答案 0 :(得分:5)

这样的事情怎么样?

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

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

答案 1 :(得分:5)

虽然每个人都试图证明逃避是必要的,但是让我告诉你一种方法来避免逃避地狱:使用RegExp constructor notation,你可以避免逃离/并在角色类中,您只需要逃离],有时-

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

请注意,/g修饰符不需要String#split(),这是默认行为。

有关JavaScript正则表达式模式转义的更多说明

  • \必须始终被转义
  • ?必须在字符类
  • 之外进行转义
  • /必须使用文字正则表达式进行转义
  • [必须在字符类
  • 之外进行转义
  • ]必须在角色类
  • 中进行转义
  • +*()^$.必须在角色外转义class,不必在字符类中转义。

答案 2 :(得分:2)

?/都需要使用\在正则表达式中进行转义:

&#13;
&#13;
let uri = '/some/random/path?param=1234'
let arr = uri.split(/\?|\//);
console.log(arr);
//arr = ["", "some", "random", "path", "param=1234"]
&#13;
&#13;
&#13;

答案 3 :(得分:2)

为了匹配文字字符/?,您需要转义它们。要逃避特殊角色,您应该在其前面放置一个\。因此?将成为\?,而/将成为\/

此外,你的正则表达式中也有一些空格字符 - 除非你实际上试图匹配空格,否则你应该将它们排除在外。例如,/abc /将匹配字符串"abc " - 请注意abc之后的空格字符。

你剩下的就是类似的东西:

var uri = '/some/random/path?param=1234'
var arr = uri.split(/\?|\//);
// ["", "some", "random", "path", "param=1234"]

一些参考链接:

答案 4 :(得分:2)

这里有效。检查

    var regex = /([\?|\/])\w+/g;
    var uri = "'/some/random/path?param=1234'";
    var final = uri.match(regex);
    console.log(final);