3 var Type = require('../../type');
5 function resolveJavascriptRegExp(data) {
6 if (data === null) return false;
7 if (data.length === 0) return false;
10 tail = /\/([gim]*)$/.exec(data),
13 // if regexp starts with '/' it can have modifiers and must be properly closed
14 // `/foo/gim` - modifiers tail can be maximum 3 chars
15 if (regexp[0] === '/') {
16 if (tail) modifiers = tail[1];
18 if (modifiers.length > 3) return false;
19 // if expression starts with /, is should be properly terminated
20 if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;
26 function constructJavascriptRegExp(data) {
28 tail = /\/([gim]*)$/.exec(data),
31 // `/foo/gim` - tail can be maximum 4 chars
32 if (regexp[0] === '/') {
33 if (tail) modifiers = tail[1];
34 regexp = regexp.slice(1, regexp.length - modifiers.length - 1);
37 return new RegExp(regexp, modifiers);
40 function representJavascriptRegExp(object /*, style*/) {
41 var result = '/' + object.source + '/';
43 if (object.global) result += 'g';
44 if (object.multiline) result += 'm';
45 if (object.ignoreCase) result += 'i';
50 function isRegExp(object) {
51 return Object.prototype.toString.call(object) === '[object RegExp]';
54 module.exports = new Type('tag:yaml.org,2002:js/regexp', {
56 resolve: resolveJavascriptRegExp,
57 construct: constructJavascriptRegExp,
59 represent: representJavascriptRegExp