2015-08-22 7 views
0

У меня есть ситуация, когда мне нужно манипулировать строкой, используя регулярные выражения, и я никогда не работал над регулярным выражением.Как использовать Regex для замены нескольких последовательностей значениями в списке?

MY String что-то вроде этого «Это [[Make]], а значение [[Make]] [[[BMW]]] и наличие этого [[[BMW]]] очень [ High] на рынке. Еще одно значение для [[Make]] - [[[Audi]]], а доступность [[[Audi]]] - [умеренная].

У меня есть три списка типов String. list1 с 3 строковыми элементами, которые будут использоваться для замены символов только между [[]]. Поэтому сначала [[Make]] будет заменен первым элементом в списке1. второй [[Make]] будет заменен вторым элементом в списке и так далее.

Аналогичная концепция может быть применена к списку2, которая также является списком со строковыми элементами. list 2 заменит все элементы между [[[]]] и будет чересчур последовательным. поэтому этот список состоит из 4 элементов.

List3 снова представляет список строк с 2 элементами, которые заменяют контент только между [].

Теперь проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, какое регулярное выражение я использую для замены содержимого для [] с помощью list3, оно также пытается заменить содержимое между [[]] и [[[]]].

Может ли кто-нибудь помочь мне с этим?

+0

Ваша попытка не хватает (я имею в виду, показать код) :-) – leaf

+0

Это можно писать регулярные выражения для правильной обработки скобок, но другой вариант - это просто заменить трехместные скобки, сначала двойники, затем синглы ... – nnnnnn

+0

@nnnnnn Но это означает, что он должен разбирать строку трижды – KumarM

ответ

1

Это идея

String s = " [x] [[x]]".replaceAll("(?<!\\[)\\[(?!\\[).*?\\]", "[1]"); 

он заменяет только [х] и оставляет [[х]], как есть. Он использует негативный взгляд позади (?<!\\[) пропустить двойные скобки

+0

Спасибо большое. Это то, что мне нужно. – Ngupta

0

Вот еще один из возможных решений:

var r, s; 
 

 
s = 'This is [[Make]] and the value of [[Make]] is [[[BMW]]] and Availability of this [[[BMW]]] is very [High] in market. another value for the [[Make]] is [[[Audi]]] and availability of [[[Audi]]] is [Moderate]'; 
 

 
// [[[]]] or [[]] or [] 
 
r = /\[\[\[(.*?)\]\]\]|\[\[(.*?)\]\]|\[(.*?)\]/g; 
 
s = s.replace(r, function ($0, $1, $2, $3) { 
 
    if ($1) return '(3x[]:' + $1 + ')'; 
 
    if ($2) return '(2x[]:' + $2 + ')'; 
 
    if ($3) return '(1x[]:' + $3 + ')'; 
 
}); 
 

 
document.body.textContent = s;