Description
Strip or extract comments, strings or both from source code.
Install
npm install strip-comments-strings
Usage
const {parseString, stripStrings, stripComments} = require("strip-comments-strings");
or
import {parseString, stripStrings, stripComments} from "strip-comments-strings"
Examples
Example file
📝 example.js ↴
""
aa
"attenti\"on"
bb
ccc
'warni\\'
'ng\''
ddd
eeee`info`
eeee
fffff
"silence"
fffff
gggggg
'noise'
gggggg
hhhhhhh`visibility`
hhhhhhh
"aaa"
"aaa"
"aaa"
let str = fs.readFileSync(path.join(__dirname, "./example.js"), "utf-8");
const stripMyComments = (str) =>
{
let counter = 0
str = stripComments(str, function (info)
{
return `(${counter++})`
}, {includeDelimiter: false});
return str
}
console.log(str)
The code above replaces all comments with ({index})
(9)
(8)
(7)(6)
(5)(4)(3)(2)
(1)
(0)
""
aa
"attenti\"on"
bb
ccc
'warni\\'
'ng\''
ddd
eeee`info`
eeee
fffff
"silence"
fffff
gggggg
'noise'
gggggg
hhhhhhh`visibility`
hhhhhhh
"aaa"
"aaa"
"aaa"
Strip strings from source
let str = fs.readFileSync(path.join(__dirname, "./example-6.js"), "utf-8");
str = stripStrings(str, function (info)
{
return "**"
}, {includeDelimiter: true});
The code above replaces all strings with two "!!"
/** // **/
/** 1 **/
//aaaa
/** 2 **/
//bbbbb
//ccccc
///////////
/** 3 **/
/** 4 **/
/** 5 **/
!!
aa
!!
bb
ccc
!!
!!
ddd
eeee!!
eeee
fffff
!!
fffff
gggggg
!!
gggggg
hhhhhhh!!
hhhhhhh
!!
!!
!!
Strip comments and strings
str = stripMyComments(str)
str = stripMyStrings(str)
It is best to always start by removing comments then strings.
Parse source
const found = parseString(str);
console.log( found );
{
text: '',
strings: [
{ content: '', index: 107, indexEnd: 107, item: [Object] },
{
content: 'attenti\\"on',
index: 115,
indexEnd: 126,
item: [Object]
},
{ content: 'warni\\\\', index: 139, indexEnd: 146, item: [Object] },
{ content: "ng\\'", index: 150, indexEnd: 154, item: [Object] },
{ content: 'info', index: 167, indexEnd: 171, item: [Object] },
{ content: 'silence', index: 188, indexEnd: 195, item: [Object] },
{ content: 'noise', index: 214, indexEnd: 219, item: [Object] },
{
content: 'visibility',
index: 238,
indexEnd: 248,
item: [Object]
},
{ content: 'aaa', index: 261, indexEnd: 264, item: [Object] },
{ content: 'aaa', index: 268, indexEnd: 271, item: [Object] },
{ content: 'aaa', index: 275, indexEnd: 278, item: [Object] }
],
comments: [
{
type: 'commentBlock',
content: '/** // **/',
index: 0,
indexEnd: 10
},
{
type: 'commentBlock',
content: '/** 1 **/',
index: 12,
indexEnd: 21
},
{
type: 'commentLine',
content: '//aaaa\r\n',
index: 23,
indexEnd: 31
},
{
type: 'commentBlock',
content: '/** 2 **/',
index: 31,
indexEnd: 40
},
{
type: 'commentLine',
content: '//bbbbb\r\n',
index: 42,
indexEnd: 51
},
{
type: 'commentLine',
content: '//ccccc\r\n',
index: 51,
indexEnd: 60
},
{
type: 'commentLine',
content: '///////////\r\n',
index: 60,
indexEnd: 73
},
{
type: 'commentBlock',
content: '/** 3 **/',
index: 73,
indexEnd: 82
},
{
type: 'commentBlock',
content: '/** 4 **/',
index: 84,
indexEnd: 93
},
{
type: 'commentBlock',
content: '/** 5 **/',
index: 95,
indexEnd: 104
}
]
}