2014-10-13 5 views
0

У меня есть следующая строка [Field1]='Field1Value'|[Field2]='Field2Value'&[Field3]='Field3Value', и я хочу получить соответствие регулярного выражения до "&" или "|", но я также хочу включить "&" или "|" в мои матчи.Повторное совпадение до "&" или "|"

Значение моя строка должна создать следующие матчи:

1. [Field1]='Field1Value' 
2. | 
3. [Field2]='Field2Value' 
4. & 
5. [Field3]='Field3Value' 

Я использую ([^&^\|]*) прямо сейчас, но проблема в том, это возвращает:

1. [Field1]='Field1Value' 
2. '' 
3. [Field2]='Field2Value' 
4. '' 
5. [Field3]='Field3Value' 
6. '' 
+0

слова предупреждения: если вы собираетесь разобрать эту строку, регулярные выражения не путь. – georg

ответ

2

Вы можете попробовать следующий код.

> var s = "[Field1]='Field1Value'|[Field2]='Field2Value'&[Field3]='Field3Value'"; 
undefined 
> s.match(/[^|&]+|[|&]/g) 
[ '[Field1]=\'Field1Value\'', 
    '|', 
    '[Field2]=\'Field2Value\'', 
    '&', 
    '[Field3]=\'Field3Value\'' ] 

Объяснение:

  • [^|&]+ Матч любой символ, но не | или & один или несколько раз.
  • | ИЛИ
  • [|&] Match | или & символы.
0

Split может вернуть разделитель при использовании скобки:

var s = "[Field1]='Field1Value'|[Field2]='Field2Value'&"; 
s.split(/(\&|\|)/g); 
/* 
    ==> [ 
     "[Field1]='Field1Value'", 
     "|", 
     "[Field2]='Field2Value'", 
     "&", 
     "" 
    ] 
*/ 
Смежные вопросы