3 var Type = require('../../type');
5 function resolveJavascriptRegExp(data) {
10 if (0 === data.length) {
15 tail = /\/([gim]*)$/.exec(data),
18 // if regexp starts with '/' it can have modifiers and must be properly closed
19 // `/foo/gim` - modifiers tail can be maximum 3 chars
20 if ('/' === regexp[0]) {
25 if (modifiers.length > 3) { return false; }
26 // if expression starts with /, is should be properly terminated
27 if (regexp[regexp.length - modifiers.length - 1] !== '/') { return false; }
29 regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
33 var dummy = new RegExp(regexp, modifiers);
40 function constructJavascriptRegExp(data) {
42 tail = /\/([gim]*)$/.exec(data),
45 // `/foo/gim` - tail can be maximum 4 chars
46 if ('/' === regexp[0]) {
50 regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
53 return new RegExp(regexp, modifiers);
56 function representJavascriptRegExp(object /*, style*/) {
57 var result = '/' + object.source + '/';
63 if (object.multiline) {
67 if (object.ignoreCase) {
74 function isRegExp(object) {
75 return '[object RegExp]' === Object.prototype.toString.call(object);
78 module.exports = new Type('tag:yaml.org,2002:js/regexp', {
80 resolve: resolveJavascriptRegExp,
81 construct: constructJavascriptRegExp,
83 represent: representJavascriptRegExp