diff --git a/src/jsonpath.js b/src/jsonpath.js index c9422f4..8d2e5c7 100644 --- a/src/jsonpath.js +++ b/src/jsonpath.js @@ -1000,7 +1000,7 @@ class JSONPathClass { .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 5cd6b63..2b6b969 100644 --- a/test/test.at_and_dollar.js +++ b/test/test.at_and_dollar.js @@ -64,4 +64,12 @@ describe('JSONPath - At and Dollar sign', function () { const result = jsonpathFn({json, path: "$.a[?(@property === 'b' && @ < 1)]", wrap: false}); assertChai.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]); + }); });