Nearly a year ago I wrote a quick post about the awesome heredoc notation for strings in many languages such as PHP:
$query = <<<QUERY SELECT * FROM table WHERE col_1 = val_1 AND col_2 = val_2; QUERY;
Unfortunately, this doesn’t exist in JavaScript. If for some reason you do need to fake it though, you can use a comment in order to achieve your goal:
function query() { /*QUERY SELECT * FROM table WHERE col_1 = val_1 AND col_2 = val_2; QUERY*/ }
Now that we have our function that does nothing and our interestingly formatted comment we can use the following function:
function getHereDoc(fn) { var match = /\/\*(\w+)(\s*?\r?\n)([\s\S]+)\2\s*\1\*\//.exec(fn + ''); return match && match[3]; }
Now all we have to do is this:
strQuery = getHerDoc(fn);
Now strQuery
will contain the query with all of the new-line characters. One downside is that you would need to make sure that you are not using a minifier on functions such as the query
function because if you do, the comments will be removed. Another less common shortcoming (unless someone knows a workaround, is the fact that you can’t use */
in the string.
Even though this is a viable solution, I would recommend just using real strings. If you need to turn multiple lines of text into string you can use this:
Multiline JS Stringifer
1 Comment
JavaScript Snippet – Get Function Comments | Chris West's Blog · August 29, 2014 at 2:36 PM
[…] year I wrote about having heredoc like strings available in JavaScript. Today I figured i’d briefly bring the topic back, providing a solution for returning an […]