2017-02-20 16 views
0

Это строка:Regex: Получить от первого появления одного и последнего вхождения другого

<html lang=3D"en-US"> <head> </head> <body> <div> <script data-scope=3D"in= 
boxmarkup" type=3D"application/json"> 
{ 
    "api_version": "1.0", 
    "publisher": { 
     "api_key": "some_api_key", 
     "name": "Google Times" 
    } 
} 
sdalfk jsdklfj slkdjf lskdjfl sjdlkf jsdlkj flsdkj flsdk jf 

Как я могу получить только эту часть?

{ 
    "api_version": "1.0", 
    "publisher": { 
     "api_key": "some_api_key", 
     "name": "Google Times" 
    } 
} 

Не может этого понять. План состоит в том, чтобы проанализировать его JSON позже.

Первое появление - {, второй - }.

Кудрявые брекеты.

+0

Вы уверены, что там не будет '{' или ''} в других местах ?? –

+0

@ibrahimmahrir, абсолютно. –

+1

@tfidelis,: - ( –

ответ

0

Если вы уверены, что фигурные скобки не может быть где-то еще, то удалите все новые линии и использовать это:

var partYouNeed = yourString.match(/\{.*\}/)[0]; 

Пример:

var str = 
 
'<html lang=3D"en-US"> <head> </head> <body> <div> <script data-scope=3D"in=\ 
 
boxmarkup" type=3D"application/json">\ 
 
{\ 
 
    "api_version": "1.0",\ 
 
    "publisher": {\ 
 
     "api_key": "some_api_key",\ 
 
     "name": "Google Times"\ 
 
    }\ 
 
}\ 
 
sdalfk jsdklfj slkdjf lskdjfl sjdlkf jsdlkj flsdkj flsdk jf'; 
 

 
var result = str.replace(/\n|\r/g, '') // remove all newlines 
 
       .match(/\{.*\}/);  // match anything inside curly braces 
 

 
if(result) 
 
    console.log(result[0]); 
 
else 
 
    console.log("nothing found!");

+0

https://regex101.com/r/oyqgpT/1 - нет соответствия –

+0

@SamKirklandWA Я забыл о новых строках в строке. Я обновил, пожалуйста, посмотрите! –

0

Вот вещь:

... 
myString = myString.replace(/\s/g,''); 
var jsonRegex = /.*{(.*)}.*/g; 
var match = jsonRegex.exec(myString); 
var jsonStr = match[1]; 
var myObject; 
try { 
    myObject = JSON.parse(jsonStr); 
} catch (JSONException) { 
    console.log('Error while parsing data: ', JSONException); 
} 
+0

https: // regex101.com/r/oyqgpT/2 - не работает ( –

+0

Хорошо попробуйте это перед моей первой строкой: myString = myString.replace (/ \ s/g, ''); – Kornflexx

+0

Новая строка удалит все пробелы (вы может сделать это в редакторе regex101). – Kornflexx