Wenn die Regex vorne nichts abschneiden soll, musst du sie mit einem ^ vorne verankern.
Dann matcht sie allerdings nicht, wenn nach $i Zeichen ein Leerzeichen oder ein Komma kommt, denn sie muss ja mindestens ein \w matchen. Das kannst du beheben, wenn du das \w+ zu einem \w* machst.
Damit erlaubst du dann das Kürzen nach einem Satzzeichen. Wenn du wirklich nur direkt nach einem Wortende abschneiden willst, hilft dir diese Regex:
Das sucht nach mindestens $i Zeichen (und möglichst wenig), und dort wie die Sequenz aufhört muss das vorherige Zeichen ein word-character sein, gefolgt von einer word boundary (\b).