From 22ab3b755e427fde6238aa2963a02d0b1b7c7cc9 Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Thu, 8 Jun 2017 02:00:33 +0300 Subject: [PATCH] cluster, dns, repl, tls, util: fix RegExp nits * Take RegExp creation out of cycles. * Use test(), not match() in boolean context. * Remove redundant RegExp parts. PR-URL: https://github.com/nodejs/node/pull/13536 Reviewed-By: Anna Henningsen --- lib/_tls_wrap.js | 2 +- lib/cluster.js | 5 ++--- lib/dns.js | 6 ++++-- lib/repl.js | 7 ++++--- lib/util.js | 10 ++++++---- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index a4bda406f817cc..1960910258bd7d 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -954,7 +954,7 @@ function SNICallback(servername, callback) { var ctx; this.server._contexts.some(function(elem) { - if (servername.match(elem[0]) !== null) { + if (elem[0].test(servername)) { ctx = elem[1]; return true; } diff --git a/lib/cluster.js b/lib/cluster.js index 5307e09d6b5566..4bfa624a57e8c2 100644 --- a/lib/cluster.js +++ b/lib/cluster.js @@ -298,14 +298,13 @@ function masterInit() { var workerEnv = util._extend({}, process.env); var execArgv = cluster.settings.execArgv.slice(); var debugPort = 0; + var debugArgvRE = /^(--inspect|--debug|--debug-(brk|port))(=\d+)?$/; workerEnv = util._extend(workerEnv, env); workerEnv.NODE_UNIQUE_ID = '' + id; for (var i = 0; i < execArgv.length; i++) { - var match = execArgv[i].match( - /^(--inspect|--debug|--debug-(brk|port))(=\d+)?$/ - ); + var match = execArgv[i].match(debugArgvRE); if (match) { if (debugPort === 0) { diff --git a/lib/dns.js b/lib/dns.js index a86f498960b254..5ff28e4baceb5b 100644 --- a/lib/dns.js +++ b/lib/dns.js @@ -297,13 +297,15 @@ exports.setServers = function(servers) { // servers cares won't have any servers available for resolution const orig = cares.getServers(); const newSet = []; + const IPv6RE = /\[(.*)\]/; + const addrSplitRE = /:\d+$/; servers.forEach((serv) => { var ipVersion = isIP(serv); if (ipVersion !== 0) return newSet.push([ipVersion, serv]); - const match = serv.match(/\[(.*)\](?::\d+)?/); + const match = serv.match(IPv6RE); // we have an IPv6 in brackets if (match) { ipVersion = isIP(match[1]); @@ -311,7 +313,7 @@ exports.setServers = function(servers) { return newSet.push([ipVersion, match[1]]); } - const s = serv.split(/:\d+$/)[0]; + const s = serv.split(addrSplitRE)[0]; ipVersion = isIP(s); if (ipVersion !== 0) diff --git a/lib/repl.js b/lib/repl.js index 52bb1b6b53986c..2dfcc2899344a6 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -861,6 +861,7 @@ function complete(line, callback) { const exts = Object.keys(this.context.require.extensions); var indexRe = new RegExp('^index(' + exts.map(regexpEscape).join('|') + ')$'); + var versionedFileNamesRe = /-\d+\.\d+/; completeOn = match[1]; var subdir = match[2] || ''; @@ -879,7 +880,7 @@ function complete(line, callback) { name = files[f]; ext = path.extname(name); base = name.slice(0, -ext.length); - if (base.match(/-\d+\.\d+(\.\d+)?/) || name === '.npm') { + if (versionedFileNamesRe.test(base) || name === '.npm') { // Exclude versioned names that 'npm' installs. continue; } @@ -923,7 +924,7 @@ function complete(line, callback) { // spam.eggs.<|> # completions for 'spam.eggs' with filter '' // foo<|> # all scope vars with filter 'foo' // foo.<|> # completions for 'foo' with filter '' - } else if (line.length === 0 || line[line.length - 1].match(/\w|\.|\$/)) { + } else if (line.length === 0 || /\w|\.|\$/.test(line[line.length - 1])) { match = simpleExpressionRE.exec(line); if (line.length === 0 || match) { var expr; @@ -1175,7 +1176,7 @@ REPLServer.prototype.memory = function memory(cmd) { self.lines.level.push({ line: self.lines.length - 1, depth: depth, - isFunction: /\s*function\s*/.test(cmd) + isFunction: /\bfunction\b/.test(cmd) }); } else if (depth < 0) { // going... up. diff --git a/lib/util.js b/lib/util.js index b96c5121ed9610..635144818d8f63 100644 --- a/lib/util.js +++ b/lib/util.js @@ -17,6 +17,8 @@ const inspectDefaultOptions = Object.seal({ breakLength: 60 }); +const numbersOnlyRE = /^\d+$/; + var Debug; var simdFormatters; @@ -668,7 +670,7 @@ function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { output.push(`... ${remaining} more item${remaining > 1 ? 's' : ''}`); } keys.forEach(function(key) { - if (typeof key === 'symbol' || !key.match(/^\d+$/)) { + if (typeof key === 'symbol' || !numbersOnlyRE.test(key)) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); } @@ -687,7 +689,7 @@ function formatTypedArray(ctx, value, recurseTimes, visibleKeys, keys) { output.push(`... ${remaining} more item${remaining > 1 ? 's' : ''}`); } for (const key of keys) { - if (typeof key === 'symbol' || !key.match(/^\d+$/)) { + if (typeof key === 'symbol' || !numbersOnlyRE.test(key)) { output.push( formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); } @@ -801,11 +803,11 @@ function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { } } if (name === undefined) { - if (array && key.match(/^\d+$/)) { + if (array && numbersOnlyRE.test(key)) { return str; } name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + if (/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/.test(name)) { name = name.substr(1, name.length - 2); name = ctx.stylize(name, 'name'); } else {