2016-09-23 3 views
-2

Мне нужно получить контент из ниже запроса, который заканчивается на [PT], а также внутри того текста, который имеет $ в конце.Regex получить все между

17 and (am restaur$ or food$[]produc$)[PT] 
*neo$ & (bruch$ | curl$ | hair$)[PT] 
(computer$ or software$ or hardware$ or peripheral$ or conductor$)[PT] 

Ожидаемый результат: утра регресс, продукты питания, произ ...

Я попытался с ниже REGEX

(?<=[(])(.*)(?=([)][[]PT)) 

это дает только текст между [PT]

+0

Ну, вы могли бы объяснить, что вы пробовали - что бы уточнить, что вы пытаетесь достичь. Кроме того, какой тег имеет значение: JS или C#? –

+0

Итак, вы используете C#. Попробуйте 'Regex.Matches (str, @" \ w + (? = \ $) ")' –

+0

Обратите внимание, что '* neo $' не находится внутри '(....)', и вы пытались получить подстроку между круглыми скобками. Что-то здесь просто не щелкает. Извините, ваш вопрос все еще неясен. –

ответ

0

Try следующее регулярное выражение (Javascript),

k.match(/(\w*)\$/g).join("").split("$"); 

где k содержит вашу строку, например: k = "17 and (restaur$ or food$[]produc$)[PT]"; здесь \w будет соответствовать всем символам слов, а функция соответствия возвращает все совпадения из строки.

0

В нижеприведенном фрагменте кода используются 2 шаблона регулярных выражений.
Первый, чтобы получить содержание PT.
И второе, чтобы получить значения из этих совпадений.

var str = "17 and (restaur$ or food$[]produc$)[PT]\ 
 
*neo$ & (bruch$ | curl$ | hair$)[PT]\ 
 
(computer$ or software$ or hardware$ or peripheral$ or conductor$)[PT]\ 
 
16 and (illumination$ [TS]) and (racing | (auto$ adj rac$) | auto$ | car)[PT]"; 
 

 
//var re1 = /\([^()]*?\)\[PT\]/g; 
 
var re1 = /\((?:[^()]*?(?:\(.*\)(?!\[)))*[^()]*?\)\[PT\]/g; 
 
var re2 = /\w+(?=\$)/g; 
 

 
var matchArray = []; 
 
var m1, m2; 
 

 
while (m1 = re1.exec(str)) { 
 
    console.log(m1[0]); 
 
    while (m2 = re2.exec(m1[0])) { 
 
     matchArray.push(m2[0]); 
 
    } 
 
} 
 

 
console.log(matchArray);

+0

это кажется для некоторых, но ниже «34 и« 41 »[TS] и (гоночный (автоматический $ adj rac $) | auto $ | car) [PT]"; получение null в этом случае – Prithvi

+0

@Prithvi Это потому, что шаблон для re1 предполагает, что нет вложенных круглых скобок. Изменено первое регулярное выражение, так что он поймает немного больше PT. Хотя без рекурсии в стандартном регулярном выражении javascript я не вижу теперь, как вы поймаете все возможные случаи для вложенных файлов. – LukStorms

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