ورود

View Full Version : سوال: عبارت باقاعده در جاوااسکریپت



yyuser
چهارشنبه 17 مرداد 1403, 15:51 عصر
سلام و خسته نباشید
چطور می شود در توابع search یا replace که عبارت با قاعده به کار برده شده از اسم یک متغیر که مقدار یک ورودی در آن است به عنوان عبارت جستجو به کار برد.
مثلا می خواهیم عبارت مورد جست و جو چه برای جست و جو و چه برای جایگزینی را کاربر در یک ورودی وارد کند.
برای مثال:


var valSearch=document.getElementById('searchTxt').val ue;
var txt=document.getElementById('myTxt').innerText;
txt.search(/valSearch/i)
;


ویا



var searchVal=document.getElementById('searchVal').val ue;
var replaceVal=document.getElementById('replaceVal').v alue;
txt.replace(/searchVal/g , replaceVal);

mazoolagh
چهارشنبه 17 مرداد 1403, 18:16 عصر
سلام و روز خوش

ادیتور انجمن کدهای درون تگ html رو درست نشون نمیده!
و الان کدهای شما هم مشخص نیست که چیه.

برای کدهای جاوااسکریپت از تگ javascript (دکمه با نوشته JS) استفاده کنین،
و برای کدهای html هم از تگ xml (دکمه با نوشته XML)،
یا کلا در تگ code بذارین (دکمه با نوشته #).

yyuser
شنبه 20 مرداد 1403, 15:00 عصر
باسلام.
من برای قسمت کدها از همین امکان (دکمه JS) ابزارها استفاده کردم ولی کد را به درستی نمایش نداد. ولی با تگ code درست شد. لطف کنید پاسخ بدید.
متشکرم

mazoolagh
شنبه 20 مرداد 1403, 21:35 عصر
سلام دوباره

برای من هنوز درست نشون نمیده - شاید با مرورگر edge مشکل داره.
بگذریم،
من کدهای شما رو دوباره فرمت کردم:

var valSearch=document.getElementById('searchTxt').val ue;
var txt=document.getElementById('myTxt').innerText;
txt.search(/valSearch/i);

var searchVal=document.getElementById('searchVal').val ue;
var replaceVal=document.getElementById('replaceVal').v alue;
txt.replace(/searchVal/g , replaceVal);

در پست بعدی پاسخ میدم.

mazoolagh
شنبه 20 مرداد 1403, 22:19 عصر
خب، در این خط 2 اشکال دیده میشه:
txt.search(/valSearch/i);

1- متد search ایندکس اولین مطابقت رو برمیگردونه و خودش به تنهایی عملی انجام نمیده،
باید از این ایندکس استفاده کنین، مثلا برای استفاده های بعدی در جایی نگهداری کنین.

2 - valSearch یک متغییر هست ولی /valSearch/ مقدار این متغییر رو بعنوان پترن نمیگیره،
خود اسمش رو میگیره و مشابه "valSearch" میشه.

اگر قرار هست مقدار یک متغییر رو در پترن استفاده کنین باید یک regex بسازین:
var valSearch = document.getElementById('searchTxt').value;
var txt = document.getElementById('myTxt').innerText;
const re = new RegExp(valSearch, 'i');
const position = txt.search(re);

mazoolagh
شنبه 20 مرداد 1403, 22:21 عصر
txt.replace(/searchVal/g , replaceVal);

پست قبلی برای این یکی هم درست هست،
به همون روش عمل کنین.

yyuser
پنج شنبه 25 مرداد 1403, 01:26 صبح
باسلام
ممنون از توضیحاتتون
یه سوال دیگه داشتم:
من میخوام اندیسی که با تابع search پیدا شد رو معادل متن اون در متن اصلی رنگی بشه؟؟
این کد رو زدم ولی خطا داره چیکار باید بکنم؟؟


document.getElementById('txt')[position].style.color='red';

yyuser
پنج شنبه 25 مرداد 1403, 01:40 صبح
سلام و خسته نباشید
برای تابع replace هم فرمودید مثل search است اما ما اینجا دو تا متغیر داریم یکی برای چیزی که پیدا میشه و یکی چیزی که قرار جایگزین بشه. ترتیب قرار گیری به چه صورته؟؟

sTxt=document.getElementById('txtR1').value;
rTxt=document.getElementById('txtR2').value;
vartxt=document.getElementById('myTxt').innerText;

constre=newRegExp(sTxt ,'i');
constposition=txt.replace(re,rTxt);

yyuser
پنج شنبه 25 مرداد 1403, 01:46 صبح
نمیدونم چرا کدهام رو اینجوری نشون میده؟؟؟
هم ابزارJS رو امتحان کردم , هم code رو ولی کدهام رو درست نشون نمیده.
من از مرورگر فایرفاکس استفاده میکنم دلیلش میتونه این باشه؟؟

mazoolagh
پنج شنبه 25 مرداد 1403, 21:12 عصر
نمیدونم چرا کدهام رو اینجوری نشون میده؟؟؟
هم ابزارJS رو امتحان کردم , هم code رو ولی کدهام رو درست نشون نمیده.
من از مرورگر فایرفاکس استفاده میکنم دلیلش میتونه این باشه؟؟


سلام و روز خوش
دلیلش این نیست که از چه مرورگری برای نوشتن پست استفاده میکنین؛
این هست که شما از ادیتور ideتون کد رو copy/paste میکنین و اینجوری فرمت شده میاد.
برای همین هم ادیتور اینجا اون فرمت رو کد میکنه:
155970
الان اینجور بنظر میاد که بعضی جاها فاصله ها هم جا افتاده (بعد از var و const)
باید فقط text کپی بشه و نه فرمت اون.

در فایرفاکس برای paste کردن کد کپی شده از ادیتور ide در درون تگ راست کلیک
و paste without formatting رو انتخاب کنین.

در edge و chrome میشه : paste as plain text
155971

در ضمن کد رو کامل بذارین (هم html هم javascript) تا بشه اجرای اون رو بررسی کرد،
یا بهتر اینکه در JSFiddle - Code Playground (https://jsfiddle.net/) بسازین.