Thanks for coming to, the world's #1 resource for all things InDesign!

Sort an Index by Page Number

What if you use the index feature but need the result in page number order instead of alphabetical order? The easiest way to make this kind of list is probably to use the Table of Contents feature instead of the index feature. (Inside the Table of Contents dialog box, there is a checkbox labeled Sort Entries in Alphabetical Order… but you only see it when you click the More Options button inside that dialog box.)

However, if you already have your index, and you need to put it in chronological order (by page number) instead of alphabetical, you could use this three step process. Here’s my starting point:


First, I’m going to use the Find/Change dialog box to search for ^(.+?)\t(\d+?)$ and replace it with $2\t$1 which means “find all the text from the beginning of the paragraph up to a tab, and then followed by some numbers until the end of the paragraph, and then replace it with the second part (the numbers) then a tab, then the first part (the text up to the tab).”


Once you change all those, you can use the SortParagraphs.jsx script, which lives inside the Window > Utilities > Scripts menu (look inside the application folder, then the sample scripts and the javascripts folder):


All you need to do is select the text frame or text and then double-click that script in the panel. Poof! It’s in page number order.

Finally, step three is to reverse the order again, by again using a grep find/change. Here you can search for ^(\d+)\t(.+)$ and then replace it with $2~y$1


Note that in this case, I swapped the tab (\t) with a right-indent tab (~y) so that I don’t have to worry about a tab stop or where that page number is going to go (it’ll always go to the right margin). In the image above you’ll see that I have already performed the Change All.

Warning: There is one very important thing that you need to watch out for when doing these kinds of grep find/changes… if you have applied local formatting (font or color changes, for example) to the text, it will get all messed up! That’s because GREP appears to work on the underlying text separately from the formatting. Very frustrating. So: save your work before you do any kind of change all; and instead of applying local formatting, use Nested Styles and GREP Styles to format your text in these kinds of documents.

David Blatner

David Blatner

David Blatner is the co-founder of the Creative Publishing Network, InDesign Magazine, and the author or co-author of 15 books, including Real World InDesign. His InDesign videos at are among the most watched InDesign training in the world. You can find more about David at
David Blatner

Latest posts by David Blatner (see all)

  • - November 30, -0001
Related Articles

13 Comments on “Sort an Index by Page Number

  1. Sounds like a great option for working with index entries. Thanks, David! There is a company in the UK called Kerntiff Publishing that has produced a suite of add-ons with indexers in mind including one that allows professional indexers to create the index in more efficient, proprietary software such as SKY Professional or Cindex and import the completed index into InDesign, converting it to the correct tags as it goes. Check them out at

  2. Hi David,
    Nifty use of Grep-styles, this.
    Would you know of a way to let it work with something like:
    Item 46–49

    That would help me a lot.
    Thanks & best,
    Rob (The Netherlands)

    • Rob: I think you would need to expand the GREP expression to allow a number OR a dash or an en dash, such as ^(.+?)\t([\d–-]+?)$
      (the square brackets mean “OR”… that is, any one of those characters)

      • Thanks David!
        I’m almost there, as this takes care of the first part of the operation. But how do I get from
        46–49 Annemarie Busschers
        50–51 Hermien Buytendijk
        Annemarie Busschers[tab]46–49
        Herzien Buytendijk[tab]50–51

        I can’t figure this out. Remember: I am a half-wit and you are a sort of genius.
        Tanks & best,

      • Rob: It’s just the same process as the article above, I think. You should be able to replace it with $2\t$1
        That means “type the second part, then a tab, then the first part” (where “part” = the stuff in the parentheses)

      • Oh, wait, sorry, I misunderstood your question. To reverse it (put the number after), you would search for ^([\d–-]+)\t(.+)$
        and then replace it with $2~y$1

        You’re not a half-wit! :-) But I do encourage you to learn a little more about grep so you can make these little edits yourself. You can learn more here:

  3. Thanks again David!
    Now everything works fine. I can now make the index I want for a 300+ page book.
    I’m trying to learn more about greps (they already save me a lot of time), but sometimes I just can’t get them right.
    You’re still a genius, though.

  4. Hi David,

    Thanks for you explanation about sorting indexes by page number. I understand more and more about grep, but I can’t figure out what I am supposed to do in the following case:
    I have an index which contains entries like:

    item1, 10, 50, 100
    item2, 15, 55, 105

    And I want to sort them by page number, resulting in;
    10 item1
    15 item2
    50 item1
    So my question is: how should I break up my multiple string of page numbers by means of grep-codes (in your example you had entries with only one page number, but I want to do the same as you did with more than one page number)

    (By the way, I have a comma followed by a space instead of a tab after the text of the entries, but I think I know how to handle that one)


  5. Hi David,

    Is there any way to add index to a word in a specific page avoiding other pages by using grep or by any scripts.

    For Example
    If we have a word “Phone” in document in page 23,64 its should add index to that page only and leave other page as it is.

    Please Suggest.

  6. If you want to view entries in page order so as to see the entries on each page (just as a reference, not as a final product), you can copy and paste the text into a word processor, create a two-column table out of the text, and sort the table by the second column. You may need to replace whatever separates the index entry and the page numbers to create the two columns. For example, I needed to replace two spaces with a tab.

Leave a Reply

Your email address will not be published. Required fields are marked *