57 lines
1.1 KiB
JavaScript
57 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
|
|
var Type = require('../../type');
|
|
|
|
|
|
function resolveJavascriptRegExp(state) {
|
|
var regexp = state.result,
|
|
tail = /\/([gim]*)$/.exec(state.result),
|
|
modifiers;
|
|
|
|
// `/foo/gim` - tail can be maximum 4 chars
|
|
if ('/' === regexp[0] && tail && 4 >= tail[0].length) {
|
|
regexp = regexp.slice(1, regexp.length - tail[0].length);
|
|
modifiers = tail[1];
|
|
}
|
|
|
|
try {
|
|
state.result = new RegExp(regexp, modifiers);
|
|
return true;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
function representJavascriptRegExp(object /*, style*/) {
|
|
var result = '/' + object.source + '/';
|
|
|
|
if (object.global) {
|
|
result += 'g';
|
|
}
|
|
|
|
if (object.multiline) {
|
|
result += 'm';
|
|
}
|
|
|
|
if (object.ignoreCase) {
|
|
result += 'i';
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
function isRegExp(object) {
|
|
return '[object RegExp]' === Object.prototype.toString.call(object);
|
|
}
|
|
|
|
|
|
module.exports = new Type('tag:yaml.org,2002:js/regexp', {
|
|
loadKind: 'scalar',
|
|
loadResolver: resolveJavascriptRegExp,
|
|
dumpPredicate: isRegExp,
|
|
dumpRepresenter: representJavascriptRegExp
|
|
});
|