همانطوری که خانم malekpour گفتند، Zero width non-joiner همان no-width optional break است که نرمافزار Word از این نام برای آن استفاده میکند و تفاوت کوچکی باعث شد تا فکر کنم اینها دو نویسهٔ متفاوت هستند. این تفاوت مربوط به نحوهٔ درج آنها میشود. مواردی که مشکلی با آنها ندارم به صورت راست به چپ درج شدهاند و مواردی که میخواستم آنها را جایگزین کنم به صورت چپ به راست داخل متن فارسی درج شده بودند. اینکه چطور به وجود آمده بودند را نمیدانم؛ ولی راه حلهایی پیدا کردم:
روش ۱ جواب جدیدی است که برای این سوال پیدا کردهام و راحتتر است. جواب قدیمی را بعد از این روش قرار دادم:
روش ۱: در پنجره Find and Replace در قسمت Find what عبارت زیر را قرار دهید. این عبارت نیمفاصله با یک حرف قبل و و یک حرف بعدش را پیدا میکند:
(?)^o(?)
در قسمت Replace with عبارت زیر را قرار دهید. این عبارت موردی را که پیدا کرده جایگزین خودش میکند ولی نیمفاصله به شکل صحیح اصلاح میشود:
\1^o\2
قبل از کلیک کردن روی Replace All گزینه Use wildcards را در قسمت More علامت بزنید.
روش ۲: طبق این پاسخ برای این کار باید ماکروی زیر را در ورد استفاده کرد. این ماکرو همه نیمفاصلههای چپ به راست را راست به چپ میکند.
Sub replace_LTR_NBZWs_with_RTL_ones()
ActiveDocument.Select
With Selection.Find
.ClearFormatting
.Text = ChrW(8204)
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchByte = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
While .Execute
Selection.RtlRun
Wend
End With
End Sub