Skip to content

Commit d571284

Browse files
authored
Merge pull request #159 from jbreton/invalid-regex
Fix regex generated for special characters
2 parents 2ab0e5c + 3c655e1 commit d571284

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

lib/index.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,16 @@ module.exports = function postHTMLExpressions (options) {
128128

129129
// Define regex to search for placeholders
130130
let before = escapeRegexpString(options.delimiters[0])
131+
let firstChar = escapeRegexpString(options.delimiters[0][0])
131132
let after = escapeRegexpString(options.delimiters[1])
132133

133-
const delimitersRegexp = new RegExp(`(?<!@${options.delimiters[0][0]}?)${before}(.+?)${after}`, 'g')
134+
const delimitersRegexp = new RegExp(`(?<!@${firstChar}?)${before}(.+?)${after}`, 'g')
134135

135136
before = escapeRegexpString(options.unescapeDelimiters[0])
137+
firstChar = escapeRegexpString(options.unescapeDelimiters[0][0])
136138
after = escapeRegexpString(options.unescapeDelimiters[1])
137139

138-
const unescapeDelimitersRegexp = new RegExp(`(?<!@${options.unescapeDelimiters[0][0]}?)${before}(.+?)${after}`, 'g')
140+
const unescapeDelimitersRegexp = new RegExp(`(?<!@${firstChar}?)${before}(.+?)${after}`, 'g')
139141

140142
// Create an array of delimiters
141143
const delimiters = [
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
${ foo }
2+
<p data-username="${ user.name }" data-user-id="user-${ user.id }-bar-${ bar }">
3+
Here's one ${ variable } and here's ${ another }. And some bar.
4+
</p>
5+
6+
ignored: ${ leaveAsIs }
7+
ignoredUnescaped: ${{ leaveAsIs }}
8+
rendered: bar
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
@${ foo }
2+
<p data-username="@${ user.name }" data-user-id="user-@${ user.id }-${ foo }-@${ bar }">
3+
Here's one @${ variable } and here's @${ another }. And some ${ foo }.
4+
</p>
5+
6+
ignored: @${ leaveAsIs }
7+
ignoredUnescaped: @${{ leaveAsIs }}
8+
rendered: ${ foo }

test/test-core.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ test('Expressions - ignored', (t) => {
7474
return process(t, 'expression_ignored', { locals: { foo: 'bar' } })
7575
})
7676

77+
test('Expressions with custom delimiters - ignored', (t) => {
78+
return process(t, 'expression_custom_delimiters_ignored', {
79+
delimiters: ['${', '}'],
80+
unescapeDelimiters: ['${{', '}}'],
81+
locals: { foo: 'bar' }
82+
})
83+
})
84+
7785
test('Raw output', (t) => {
7886
return process(t, 'raw', { locals: { foo: 'bar' } })
7987
})

0 commit comments

Comments
 (0)