diff --git a/core/modules/utils/utils.js b/core/modules/utils/utils.js index af7867201..4d4aa419d 100644 --- a/core/modules/utils/utils.js +++ b/core/modules/utils/utils.js @@ -461,7 +461,7 @@ Returns an object with the following fields, all optional: */ exports.parseTextReference = function(textRef) { // Separate out the title, field name and/or JSON indices - var reTextRef = /^\s*([^!#]+)?(?:(?:!!([^\s]+))|(?:##(.+)))?\s*/mg, + var reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg, match = reTextRef.exec(textRef), result = {}; if(match && reTextRef.lastIndex === textRef.length) { @@ -473,7 +473,13 @@ exports.parseTextReference = function(textRef) { result.field = match[2]; } if(match[3]) { - result.index = match[3]; + result.title = match[3]; + } + if(match[4]) { + result.index = match[4]; + } + if(match[5]) { + result.title = match[5]; } } else { // If we couldn't parse it diff --git a/editions/test/tiddlers/tests/test-utils.js b/editions/test/tiddlers/tests/test-utils.js index de7393a22..c2c038c65 100644 --- a/editions/test/tiddlers/tests/test-utils.js +++ b/editions/test/tiddlers/tests/test-utils.js @@ -39,8 +39,11 @@ describe("Utility tests", function() { expect(ptr("ti#tle##index")).toEqual( { title : 'ti#tle', index : 'index' } ); + expect(ptr("ti!tle!!field")).toEqual( + { title : 'ti!tle', field : 'field' } + ); expect(ptr("title##index!!field")).toEqual( - { title : 'title', index : 'index!!field' } + { title : 'title##index', field : 'field' } ); expect(ptr("title!!field##index")).toEqual( { title : 'title', field : 'field##index' }