react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / js-yaml / lib / js-yaml / type / js / regexp.js
81154 views'use strict';12var Type = require('../../type');34function resolveJavascriptRegExp(data) {5if (null === data) {6return false;7}89if (0 === data.length) {10return false;11}1213var regexp = data,14tail = /\/([gim]*)$/.exec(data),15modifiers = '';1617// if regexp starts with '/' it can have modifiers and must be properly closed18// `/foo/gim` - modifiers tail can be maximum 3 chars19if ('/' === regexp[0]) {20if (tail) {21modifiers = tail[1];22}2324if (modifiers.length > 3) { return false; }25// if expression starts with /, is should be properly terminated26if (regexp[regexp.length - modifiers.length - 1] !== '/') { return false; }2728regexp = regexp.slice(1, regexp.length - modifiers.length - 1);29}3031try {32var dummy = new RegExp(regexp, modifiers);33return true;34} catch (error) {35return false;36}37}3839function constructJavascriptRegExp(data) {40var regexp = data,41tail = /\/([gim]*)$/.exec(data),42modifiers = '';4344// `/foo/gim` - tail can be maximum 4 chars45if ('/' === regexp[0]) {46if (tail) {47modifiers = tail[1];48}49regexp = regexp.slice(1, regexp.length - modifiers.length - 1);50}5152return new RegExp(regexp, modifiers);53}5455function representJavascriptRegExp(object /*, style*/) {56var result = '/' + object.source + '/';5758if (object.global) {59result += 'g';60}6162if (object.multiline) {63result += 'm';64}6566if (object.ignoreCase) {67result += 'i';68}6970return result;71}7273function isRegExp(object) {74return '[object RegExp]' === Object.prototype.toString.call(object);75}7677module.exports = new Type('tag:yaml.org,2002:js/regexp', {78kind: 'scalar',79resolve: resolveJavascriptRegExp,80construct: constructJavascriptRegExp,81predicate: isRegExp,82represent: representJavascriptRegExp83});848586