<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مرتضی</title>
        <link>https://virgool.io/feed/@mort3za</link>
        <description>Frontend developer</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:49:43</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/486/avatar/hOOoRa.jpg?height=120&amp;width=120</url>
            <title>مرتضی</title>
            <link>https://virgool.io/@mort3za</link>
        </image>

                    <item>
                <title>دستور git restore چیست؟</title>
                <link>https://virgool.io/@mort3za/what-is-git-restore-ivvoltmxkdjx</link>
                <description>امروز یه دستور تقریبا جدید از گیت یاد گرفتم و خواستم اینجا بنویسمش. این دستور از گیت نسخه 2.23 اضافه شده و از نظر من می‌تونه جزو دستورهای پرکاربردمون باشه.حوصله خوندن ندارید؟ [TLDR]گیت ری‌استور میاد تغییرات موقت که هنوز add نشدن رو حذف می‌کنه.داستان چیه؟فرض کنید دارید یه باگی رو رفع می‌کنید و تا الان ۱۰ تا فایل رو تغییر دادید ولی هنوز کارتون تموم نشده که بخواید یه کامیت بامعنی بزنید، هنوز لازمه که چندتا لاگ جاهای مختلف بذارید و یه سری چیزها رو تست کنید و بعد که مطمئن شدید همه چیز ردیفه کامیت کنید. برای اینکه این لاگ‌های موقت رو توی کامیت جا نذاریم یه راه خوب هست.خب چیکار باید کرد؟تا جایی که همه چیز اکی هست میایم git add . میزنیم و همه چیز رو میفرستیم تو حالت staged (یا همون حالت سبز توی git status).بعد لاگ‌ها و کارهای موقتی که لازم هست رو اضافه می‌کنیم.حالا که از نتیجه مطمئن هستیم و فکر می‌کنیم که همه چیز درست کار می‌کنه میایم git restore . میزنیم. این دستور میاد هر چیزی که هنوز add نشده (یا توی git status هنوز قرمز هست) رو پاک می‌کنه.الان فقط یه local repository تمیز داریم که فقط فایل‌هایی که add شده بودن هنوز هستن و تغییرات موقت (حتی روی همون فایل‌هایی که add شده بودن) از بین رفته. پس با خیال راحت و بدون اینکه دوباره از اول diff رو بررسی کنیم یه git commit می‌زنیم و تمام.</description>
                <category>مرتضی</category>
                <author>مرتضی</author>
                <pubDate>Thu, 04 Aug 2022 14:09:06 +0430</pubDate>
            </item>
                    <item>
                <title>نکاتی از رگولار اکسپرشن که شاید ندونید</title>
                <link>https://virgool.io/Software/regex-tips-uk4npsbjdcp3</link>
                <description>Regexاکثر برنامه‌نویس‌ها تا حدودی با ریجکس آشنا هستند و من نمی‌خوام مقدمات ریجکس رو در اینجا بنویسم. فقط چند تا مورد به درد بخور رو که احتمال می‌دم کمتر شناخته‌شده هستند می‌نویسم.Word boundry \bاین متاکاراکتر در واقع یه پوزیشن هست و چیزی که باهاش مچ می‌شه طولش صفره. قبل و بعد از کلمات رو مچ می‌کنه (کلمه شامل کاراکترهای [a-bA-B_] می‌شه). کجا به درد می‌خوره؟ وقتی می‌خواید یه کلمه کامل رو پیدا کنید، مثل گزینه Whole Word توی فایند ادیتورها./\bis\b/ matchs: This island is beautiful.توی مثال بالا island مچ نمی‌شه چون بعد از is کلمه تموم نمی‌شه.Greedy vs lazyاین مورد رو فقط با مثال توضیح می‌دم./H.+L/ matchs: HELLO GUYSتوی مثال بالا «نقطه مثبت» تا می‌تونه کاراکترهای بیشتری رو مچ می‌کنه و جلو میره. به این حالت greedy می‌گن./H.+?L/ matchs: HELLO GUYSو تو این مثال «نقطه مثبت علامت سوال» حالت lazy داره و با اولین مچ، کنترل رو میده به مرحله بعدی عبارتمون.پس وقتی علامت سوال رو اضافه می‌کنیم حالت lazy رو فعال می‌کنیم که دنبال کوتاه‌ترین عبارت می‌گرده و میره سراغ ادامه کار.Back referenceوقتی چیزی رو داخل پرانتر می‌نویسید و یک گروه می‌سازید می‌تونید به اون گروه در همون عبارت دوباره اشاره کنید، اینطوری:/&lt;(em|i|b|strong)&gt;.+?&lt;\/\1&gt;/ matches: &lt;em&gt;some text&lt;/em&gt; or &lt;b&gt;some text&lt;/b&gt;توی مثال بالا به جای تگ بسته از «بک‌اسلش 1» استفاده کردم که میاد به جاش محتوای پرانتز رو قرار می‌ده. اینطوری تگ‌ها با هم قاطی نمی‌شن و مثلا با این عبارت مچ نمی‌شه:&lt;strong&gt;some text&lt;/b&gt;اگر دو تا گروه داشته باشید دومی میشه «بک‌اسلش 2» و همینطور تا «بک‌اسلش 9» جا داره.نکته اینکه اگه از حالت lazy استفاده نمی‌کردیم اون نقطه مثبت تا آخر متن رو بدون توجه به تگ بسته جلو می‌رفت و همه چی به هم می‌ریخت :)Performanceاگه به مساله پرفورمنس توی ریجکس توجه نکنیم می‌تونه تبدیل به یه فاجعه بشه. بک‌ترک‌های متوالی برای مچ کردن عبارت با استرینگ ما با افزایش تعداد کاراکترهای استرینگ می‌تونه به صورت نمایی بالا بره و مثلا توی جاوااسکریپت می‌تونه کاملا صفحه رو فریز کنه تا کار تموم بشه.راه حل چیه؟ با تا حد ممکن محدوده تست عبارت رو کوچیک کنیم. «نقطه مثبت» از «نقطه ستاره» بهتره و استفاده از {min, max} از قبلی‌ها بهتر. اگه نوع کاراکترهای مورد نظرتون رو هم می‌دونید اونا رو توی عبارت مشخص کنید. lazy یا greedy بودن لزوما تاثیری نداره.اگه این مطلب براتون مفید بود خوشحال میشم که با بقیه همرسانش کنید ( ͡ᵔ ͜ʖ ͡ᵔ )</description>
                <category>مرتضی</category>
                <author>مرتضی</author>
                <pubDate>Fri, 01 Jun 2018 22:26:01 +0430</pubDate>
            </item>
                    <item>
                <title>دیباگ کردن Node.js بوسیله Chrome Developer Tools</title>
                <link>https://virgool.io/nodejs/debug-nodejs-with-chrome-devtools-mbbgxylh7p7y</link>
                <description>این اولین نوشته من در اینجاست و فقط خواستم با یه مطلب شروع کنم، به امید اینکه مطالب بعدی رو راحت‌تر شروع کنم.زمانی که برنامه‌نویسی Node.js رو شروع کردم طبق روال همیشگی همه کارها رو با console.log انجام می‌دادم ولی این روش سرعت خیلی کمی داره در حالی که می‌شه از امکانات خوب ابزار DevTools در کروم استفاده کرد.پیش‌نیازهاNode.js v8.0.0+Google Chrome v57+روش کاربرای اجرای برنامه در حالت دیباگ از این دستور استفاده کنید:node --inspect app.js
// یا این دستور برای توقف کد در ابتدای دیباگ:
node --inspect-brk app.jsبعد از اجرای کد بالا باید خروجی شبیه این ظاهر بشه:اجرای Node.js برای دیباگحالا کروم رو باز کنید و توی نوار آدرس تایپ کنید:chrome://inspectدر این صفحه باید فایل پروژه‌ای که در حال دیباگ هستید ظاهر بشه. گزینه زیر رو کلیک کنید:Open Dedicated DevTools For Nodeبا اینکار پنجره آشنای DevTools باز می‌شه که در اون تب Sources فعال هست.حالا می‌تونید دیباگ کدتون رو شروع کنید، با استفاده از کلمه کلیدی debugger در میان کد، یا کلیک روی شماره خطوط در DevTools کد رو در جای مناسب متوقف کنید.اگر خواستید برنامه رو متوقف کنید و دوباره اجرا کنید نیازی به بستن DevTools نیست، بعد از اجرای دستور دیباگ، پنجره‌ای که باز گذاشتید خودبخود به همون کد وصل می‌شه. پیشنهاد بهتر به جای توقف کد و اجرای دوباره هم استفاده از nodemon به جای node است:nodemon --inspect-brk app.jsمطالعه بیشترGet Started with Debugging JavaScript in Chrome DevTools</description>
                <category>مرتضی</category>
                <author>مرتضی</author>
                <pubDate>Tue, 20 Feb 2018 20:09:34 +0330</pubDate>
            </item>
            </channel>
</rss>