2016-01-12 3 views
0

Я хочу разбить строку в каждой позиции, которая содержит ? или /. Я не очень хорошо знаком с регулярными выражениями, так что это дает мне немало проблем, так как я не уверен, где и что сбежать. Это должно быть что-то вроде этого:Как совместить `?` Или `/` с регулярным выражением?

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

это Js? .... –

+1

@AvinashRaj [Да] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let). – Teemu

+0

Просто веселое регулярное выражение, в котором вам не нужно скрывать ни '' ', ни'/':' let arr = uri.split (RegExp ("[? /]")) '. Кстати, вы не указали, что хотите получить в качестве вывода. –

ответ

5

Как о чем-то вроде этого?

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

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

+0

может быть матч. 'str.match (/ [^? \ /] +/g)' –

+0

if, вы wnat '/', '?' затем 'str.match (/ [^? \ /] + | [? \ /]/g) ' –

+0

@bobblebubble Кажется, вы правы, сэр! –

2

Оба ? и / необходимости экранировать в вашем регулярном выражении с помощью \:

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

+2

Не всегда следует избегать их. –

+2

'uri.split (/ [? \ /] /);' –

+1

@stribizhev, но мы должны здесь .. –

2

Для того, чтобы соответствовать буквенные символы/ и ?, вам нужно, чтобы избежать их. Чтобы избежать специального символа, перед ним следует поставить \. Таким образом, ? станет \?, а / станет \/.

Кроме того, у вас есть еще пробелы в вашем регулярном выражении - если вы на самом деле не пытаетесь совместить пробелы, вы должны их оставить. Например, /abc / будет соответствовать строке "abc " - отметьте пробел после abc.

То, что вы остались с что-то похожее на это:

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

Некоторые ссылки ссылки:

2

Здесь works.Check его

var regex = /([\?|\/])\w+/g; 
    var uri = "'/some/random/path?param=1234'"; 
    var final = uri.match(regex); 
    console.log(final); 
+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 шаблонов регулярных выражений:

  • \ всегда должны быть экранированы
  • ? должны быть экранированы вне символьного класса
  • / должны быть экранированы в буквальном регулярном выражении Обозначение
  • [ должно быть экранировано, если вне класса символов
  • ] должны быть экранированы внутри класса символов
  • +, *, (, ), ^, $, . должны быть экранированы вне класса символов и не должны быть экранированы внутри класса символов.
+0

Обратите внимание, что я не думаю, что нотация конструктора лучше всего здесь, MDN предлагает использовать литерал для любой известной (нединамической) схемы. Таким образом, '/ [? \ /] /' - лучший вариант здесь. –

Смежные вопросы