2015-04-21 3 views
-2

Я хочу, чтобы соответствовать config.json и config.staging.json и config.anything.jsonЧто такое регулярное выражение JavaScript для соответствия config. *. Json?

До сих пор я configFile.match /config\.(.*)\.json/i

+3

считают, что, когда '. *' Не совпадает ни с чем остальная часть шаблон 'config..json'. – zzzzBov

+0

Если бы это был я, я бы использовал два отдельных регулярных выражения: '/^config\./i.test(configFile) &&/\. Json $/i.test (configFile)'. Легкий код для чтения, простой код для отладки. – zzzzBov

ответ

5

Вы требуете, что две точки, но в config.json, есть только один. Вы можете использовать не-захват группу необязательного второго бита:

/config(?:\.(.+))?\.json/i 

Я предполагаю, что вы хотели, что группа захвата там, чтобы захватить staging или anything.

Вы также можете якорей, так что не соответствует fooconfig.jsonasdlfja:

/^config(?:\.(.+))?\.json$/i 

Примеры:.

var rex = /^config(?:\.(.+))?\.json$/i; 
 
var tests = { 
 
    "config.json": [true, undefined], 
 
    "config.staging.json": [true, "staging"], 
 
    "config.anything.json": [true, "anything"], 
 
    "CONFIG.JSON": [true, undefined], 
 
    "cOnFiG.StAgInG.JsOn": [true, "StAgInG"], 
 
    "fooconfig.json": null, 
 
    "config.jsonfoo": null, 
 
    "configjson": null 
 
}; 
 
Object.keys(tests).forEach(function(str) { 
 
    var result = describe(str.match(rex)), 
 
     expect = describe(tests[str]); 
 
    snippet.log("Testing: " + str); 
 
    snippet.log("Result : " + result); 
 
    snippet.log("Expect : " + expect); 
 
    if (result == expect) { 
 
    snippet.log("Correct"); 
 
    } else { 
 
    snippet.log("**ERROR**"); 
 
    } 
 
    snippet.log("--"); 
 
}); 
 

 
function describe(r) { 
 
    if (r) { 
 
    if (r[1]) { 
 
     return "Match, captured '" + r[1] + "'"; 
 
    } 
 
    return "Match, no capture"; 
 
    } 
 
    return "No match"; 
 
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

Это не работает для строк 'config..json' и' config.jsonot' – MaxZoom

0

Ваш конфигурации < -somthing -> JSON regex is

/\bconfig(\.[\w]+)*\.json\b/gi 

where: 
\b word boundry 
\. dot character 
[\w] followed by any word character 
()* matches this part zero or more times 
/gi global case ignored search 

См DEMO примеры и результаты

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