রেগেক্স জাভাস্ক্রিপ্টে প্রশ্ন চিহ্ন থেকে দূরে


90

আমি মনে করি এটি একটি সাধারণ প্রশ্ন।

আমি জাভাস্ক্রিপ্টে রেগেক্স ব্যবহার করে অন্য স্ট্রিংয়ের একটি স্ট্রিংয়ের ঘটনাটি অনুসন্ধান করার চেষ্টা করছি:

 var content ="Hi, I like your Apartment. Could we schedule a viewing? My phone number is: ";

 var gent = new RegExp("I like your Apartment. Could we schedule a viewing? My", "g");

 if(content.search(gent) != -1){   
     alert('worked');     
 }          

?চরিত্রটির কারণে এটি কাজ করে না .... আমি এটি দিয়ে পালানোর চেষ্টা করেছি \, তবে এটিও কার্যকর হয় না। ?একটি বিশেষ চরিত্র হিসাবে পরিবর্তে আক্ষরিক ব্যবহার করার অন্য উপায় আছে ?


এর মধ্যে সবচেয়ে খারাপ দিকটি হ'ল এমনকি একটি রেইগেক্সের পরিবর্তে স্ট্রিং ব্যবহার করাও এই সমস্যার কারণ হতে পারে, উদাহরণস্বরূপ str.search("?")এটি অবশ্যই বাগের মতো মনে হয় কারণ এটি কোনও রেজেক্স নয় এবং এটির মতো আচরণ করা উচিত নয়। 🤦
সনেটেক

উত্তর:


150

আপনার এটিকে দুটি পিছনে ফেলে পালাতে হবে

\\?

আরও বিশদ জন্য এটি দেখুন:

http://www.trans4mind.com/personal_de વિકાસment/ জাভা স্ক্রিপ্ট / নিয়মিত ১০০ এক্সপ্রেসন ১০০20 সিম্পল ১০০ ইউজেজ এইচটিএম


17
… একটি রেজেক্সের জন্য এবং একটি স্ট্রিং ডিক্লারেশনের জন্য।
গম্বো

মাইন্ড ঘা! রেগেক্সের সাথে কয়েক বছর কাজ করার পরে, ভেবেছিলাম আমি সবকিছু দেখেছি .. তবে না, আপনি এখানে যান। ডাবল পলায়ন। অনুমান একদিন আমি ট্রিপল দেখতে পাব।
জিও

26

আপনার দ্বিগুণ স্ল্যাশ ব্যবহার করা উচিত:

var regex = new RegExp("\\?", "g");

কেন? কারণ জাভাস্ক্রিপ্টে \স্ট্রিংগুলিতে অক্ষরগুলি থেকে বাঁচতে ব্যবহৃত হয়, সুতরাং: "\?" হয়ে:"?"

এবং "\\?", হয়ে যায় "\?"


16

আপনি উদ্ধৃতিগুলির পরিবর্তে স্ল্যাশ এবং তারপরে প্রশ্ন চিহ্ন থেকে বাঁচতে একক ব্যাকস্ল্যাশ দিয়ে আপনার রেজিএক্সপিকে সীমিত করতে পারেন। এটা চেষ্টা কর:

var gent = /I like your Apartment. Could we schedule a viewing\?/g;

6

যখনই আপনার একটি পরিচিত প্যাটার্ন রয়েছে (যেমন আপনি কোনও RegExp তৈরি করতে কোনও ভেরিয়েবল ব্যবহার করেন না), আক্ষরিক রেজেক্স নোটেশনটি ব্যবহার করুন যেখানে আপনাকে বিশেষ রেজেক্স মেটাচার্যাক্টরগুলি থেকে বাঁচতে কেবল একক ব্যাকস্ল্যাশ ব্যবহার করতে হবে :

var re = /I like your Apartment\. Could we schedule a viewing\?/g;
                               ^^                            ^^

যখনই আপনার ডায়নামিকভাবে একটি রেজিএক্সপ্লেস তৈরি করার দরকার আছে, RegExpকনস্ট্রাক্টর স্বরলিপি ব্যবহার করুন যেখানে আপনি তাদের জন্য আক্ষরিক ব্যাকস্ল্যাশ বোঝাতে ডাবল ব্যাকস্ল্যাশ করতে হবে :

var questionmark_block = "\\?"; // A literal ?
var initial_subpattern = "I like your Apartment\\. Could we schedule a viewing"; // Note the dot must also be escaped to match a literal dot
var re = new RegExp(initial_subpattern + questionmark_block, "g");

এবং আপনি যদি String.rawস্ট্রিং আক্ষরিক ব্যবহার করেন তবে আপনি \যেমন ব্যবহার করতে পারেন (কোনও টেম্পলেট স্ট্রিং আক্ষরিক ব্যবহারের একটি উদাহরণ দেখুন যেখানে আপনি রেੇগেক্স প্যাটার্নে ভেরিয়েবলগুলি রাখতে পারেন):

const questionmark_block = String.raw`\?`; // A literal ?
const initial_subpattern = "I like your Apartment\\. Could we schedule a viewing";
const re = new RegExp(`${initial_subpattern}${questionmark_block}`, 'g'); // Building pattern from two variables
console.log(re); // => /I like your Apartment\. Could we schedule a viewing\?/g

একটি পড়তে হবে: RegExp: MDN এ বর্ণনা

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.