diff --git a/source/funkin/FreeplayState.hx b/source/funkin/FreeplayState.hx
index 277db9873..bc3d9bbce 100644
--- a/source/funkin/FreeplayState.hx
+++ b/source/funkin/FreeplayState.hx
@@ -393,7 +393,7 @@ class FreeplayState extends MusicBeatSubState
           case "ALL":
             generateSongList(null, true);
           default:
-            generateSongList({filterType: STARTSWITH, filterData: str}, true);
+            generateSongList({filterType: REGEXP, filterData: str}, true);
         }
       };
 
@@ -477,6 +477,13 @@ class FreeplayState extends MusicBeatSubState
     {
       switch (filterStuff.filterType)
       {
+        case REGEXP:
+          // filterStuff.filterData has a string with the first letter of the sorting range, and the second one
+          // this creates a filter to return all the songs that start with a letter between those two
+          var filterRegexp = new EReg("^[" + filterStuff.filterData + "].*", "i");
+          tempSongs = tempSongs.filter(str -> {
+            return filterRegexp.match(str.songName);
+          });
         case STARTSWITH:
           tempSongs = tempSongs.filter(str -> {
             return str.songName.toLowerCase().startsWith(filterStuff.filterData);
@@ -1045,6 +1052,7 @@ typedef SongFilter =
 enum abstract FilterType(String)
 {
   var STARTSWITH;
+  var REGEXP;
   var FAVORITE;
   var ALL;
 }