diff --git a/src/jsonpath.js b/src/jsonpath.js index e2bdbb5..068254e 100644 --- a/src/jsonpath.js +++ b/src/jsonpath.js @@ -649,7 +649,7 @@ JSONPath.prototype._eval = function ( .replaceAll('@parent', '_$_parent') .replaceAll('@property', '_$_property') .replaceAll('@root', '_$_root') - .replaceAll(/@([.\s)[])/gu, '_$_v$1'); + .replaceAll(/@([-.\s)[<>=!%*/+&|])/gu, '_$_v$1'); if (containsPath) { script = script.replaceAll('@path', '_$_path'); } diff --git a/test/test.at_and_dollar.js b/test/test.at_and_dollar.js index c69d871..d5d3ae4 100644 --- a/test/test.at_and_dollar.js +++ b/test/test.at_and_dollar.js @@ -52,4 +52,12 @@ describe('JSONPath - At and Dollar sign', function () { const result = jsonpath({json, path: "$.a[?(@property === 'b' && @ < 1)]", wrap: false}); assert.deepEqual(result, expected); }); + + it('bare @ adjacent to an operator (no whitespace)', () => { + const json = [0, 1, 2, 3]; + assert.deepEqual(jsonpath({json, path: '$[?(@>1)]'}), [2, 3]); + assert.deepEqual(jsonpath({json, path: '$[?(@<2)]'}), [0, 1]); + assert.deepEqual(jsonpath({json, path: '$[?(@===2)]'}), [2]); + assert.deepEqual(jsonpath({json, path: '$[?(@!==2)]'}), [0, 1, 3]); + }); });