diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md
index a824409f9..bdd7589a9 100644
--- a/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md
+++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/1-find-non-negative-integers/solution.md
@@ -1,9 +1,9 @@
-The regexp for an integer number is `pattern:\d+`.
+পূর্ণসংখ্যার রেগুলার এক্সপ্রেশন হল `pattern:\d+`।
-We can exclude negatives by prepending it with the negative lookahead: `pattern:(?` tag, we must first find it. We can use the regular expression pattern `pattern:
` for that.
+`` ট্যাগ ভিতরে নতুন ট্যাগ স্থাপনের জন্য, আমাদের প্রথমে এটি খুঁজে বের করতে হবে। এজন্য আমরা এই রেগুলার এক্সপ্রেশনটি ব্যবহার করব `pattern:`।
-In this task we don't need to modify the `` tag. We only need to add the text after it.
+এই টাস্কের জন্য আমাদের `` ট্যাগকে প্রতিস্থাপিত করা লাগবে না। আমাদের শুধুমাত্র ট্যাক্সটিকে সংযোগ করতে হবে।
-Here's how we can do it:
+এখানে দেখুন আমরা কিভাবে এটি করতে পারি:
```js run
let str = '......';
@@ -11,9 +11,10 @@ str = str.replace(//, '$&Hello
');
alert(str); // ...Hello
...
```
-In the replacement string `$&` means the match itself, that is, the part of the source text that corresponds to `pattern:`. It gets replaced by itself plus `Hello
`.
-An alternative is to use lookbehind:
+রিপ্লেসমেন্ট স্ট্রিংয়ে `$&` দ্বারা বুঝায় মিলের কন্টেন্টটি অর্থাৎ সোর্সের ট্যাক্সটি `pattern:`। মিলকৃত কন্টেন্টটি অতঃপর `Hello
`।
+
+বিকল্প আরেকটি হতে পারে লুকবিহাইন্ড:
```js run
let str = '......';
@@ -22,15 +23,15 @@ str = str.replace(/(?<=)/, `Hello
`);
alert(str); // ...Hello
...
```
-As you can see, there's only lookbehind part in this regexp.
+এখানে দেখতে পাচ্ছি, এখানে রেগুলার এক্সপ্রেশনে শুধুমাত্র লুকবিহাইন্ডের অংশটি আছে।
-It works like this:
-- At every position in the text.
-- Check if it's preceeded by `pattern:`.
-- If it's so then we have the match.
+এটি এভাবে কাজ করছে:
+- টেক্সটের প্রতিটি পজিশনে।
+- যাচাই করছে পূর্বে `pattern:` আছে কিনা।
+- যদি থাকে তাহলে আমাদের মিলটি পাব।
-The tag `pattern:` won't be returned. The result of this regexp is literally an empty string, but it matches only at positions preceeded by `pattern:`.
+`pattern:` ট্যাগটি রিটার্ন করবে না। সুতরাং রেজাল্ট হবে এম্পটি স্ট্রিং, কিন্ত ম্যাচটির অবস্থান হবে `pattern:` এর পরের অবস্থানটি।
-So we replaces the "empty line", preceeded by `pattern:`, with `Hello
`. That's the insertion after ``.
+সুতরা আমরা "empty line" টিকে রিপ্লেস করব `Hello
` দ্বারা যার পূর্বে `pattern:` আছে। সুতরাং নতুন ট্যাগটি হবে `` এর পর।
-P.S. Regexp flags, such as `pattern:s` and `pattern:i` can also useful: `pattern://si`. The `pattern:s` flag makes the dot `pattern:.` match a newline character, and `pattern:i` flag makes `pattern:` also match `match:` case-insensitively.
+লক্ষ্যনীয় রেগুলার এক্সপ্রেশন ফ্ল্যাগ, যেমন `pattern:s` এবং `pattern:i` দরকারী: `pattern://si`। `pattern:s` ফ্ল্যাগটি `pattern:.` দ্বারা নিউলাইন ক্যারাক্টারকেও বুঝায়, এবং `pattern:i` ফ্ল্যাগ কেস-ইন্সেসিটিভ বুঝায় `pattern:` এটি `match:` এর সাথেও ম্যাচ করবে।
\ No newline at end of file
diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md
index be1a259f6..df61f4c1f 100644
--- a/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md
+++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/2-insert-after-head/task.md
@@ -1,14 +1,13 @@
-# Insert After Head
+# Body এর ভিতরে H1 ট্যাগ
-We have a string with an HTML Document.
+HTML Document এর একটি স্ট্রিং আছে।
-Write a regular expression that inserts `Hello
` immediately after `` tag. The tag may have attributes.
+একটি রেগুলার এক্সপ্রেশন লিখুন যার মাধ্যমে `` ট্যাগ এর পর `Hello
` কে সংযোগ করতে পারি। ট্যাগটির একাধিক অ্যাট্রিবিউট থাকতে পারে।
-For instance:
+উদাহরণস্বরূপ:
```js
-let regexp = /your regular expression/;
-
+let regexp = /আপনার প্যাটার্ন/;
let str = `
@@ -20,7 +19,7 @@ let str = `
str = str.replace(regexp, `Hello
`);
```
-After that the value of `str` should be:
+এর পর `str` এর মান হবে:
```html
Hello
diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md
index 48c82da14..af1f6460b 100644
--- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md
+++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md
@@ -1,39 +1,39 @@
-# Lookahead and lookbehind
+# লুকঅ্যাহেড এবং লুকবিহাইন্ড
-Sometimes we need to find only those matches for a pattern that are followed or preceeded by another pattern.
+অনেক সময় আমাদের এমন প্যাটার্ন খুঁজা লাগে যা অন্য প্যাটার্নের উপর নির্ভর করে।
-There's a special syntax for that, called "lookahead" and "lookbehind", together referred to as "lookaround".
+এজন্য রেগুলার এক্সপ্রেশনে একটি বিশেষ সিনট্যাক্স আছে "লুকঅ্যাহেড" এবং "লুকবিহাইন্ড", এদের একত্রে বলা হয় "লুকঅ্যারাউন্ড"।
-For the start, let's find the price from the string like `subject:1 turkey costs 30€`. That is: a number, followed by `subject:€` sign.
+চলুন একটি ব্যবহারিক উদাহরণ দেখি, `subject:1 turkey costs 30€` এ স্ট্রিং হতে আমরা দাম খুঁজে বের করব। প্যাটার্নটি হবে প্রথমে একটি `subject:€` চিহ্ন তারপর একটি সংখ্যা।
-## Lookahead
+## লুকঅ্যাহেড
-The syntax is: `pattern:X(?=Y)`, it means "look for `pattern:X`, but match only if followed by `pattern:Y`". There may be any pattern instead of `pattern:X` and `pattern:Y`.
+সিনট্যাক্সটি হবে: `pattern:X(?=Y)`, এটি দ্বারা বুঝায় এর সাথে মিলবে `pattern:X`, কেবলমাত্র এটি যদি `pattern:Y` দ্বারা শুরু হয়। `pattern:X` এবং `pattern:Y` এর পরিবর্তে যেকোন প্যাটার্ন হতে পারে।
-For an integer number followed by `subject:€`, the regexp will be `pattern:\d+(?=€)`:
+`subject:€` পর একটি পূর্ণ সংখ্যা হবে, সুতরাং রেগুলার এক্সপ্রেশনটি হবে `pattern:\d+(?=€)`:
```js run
let str = "1 turkey costs 30€";
-alert( str.match(/\d+(?=€)/) ); // 30, the number 1 is ignored, as it's not followed by €
+alert( str.match(/\d+(?=€)/) ); // 30, 1 এর সাথে মিল হবে না কেননা এর পূর্বে € নাই
```
-Please note: the lookahead is merely a test, the contents of the parentheses `pattern:(?=...)` is not included in the result `match:30`.
+লক্ষ্য করুন: লুকঅ্যাহেড হল একটি যাচাই পদ্ধতি, প্যারেন্টেসিসের কন্টেন্ট `pattern:(?=...)` রেজাল্টের মধ্যে আসবে না অর্থাৎ রেজাল্ট হবে `match:30`।
-When we look for `pattern:X(?=Y)`, the regular expression engine finds `pattern:X` and then checks if there's `pattern:Y` immediately after it. If it's not so, then the potential match is skipped, and the search continues.
+চলুন `pattern:X(?=Y)` কিভাবে কাজ করছে তা বোঝার চেষ্টা করি, রেগুলার এক্সপ্রেশন ইঞ্জিন প্রথমে খুঁজবে `pattern:X` এবং এরপর খুঁজবে `pattern:Y` আছে কিনা। যদি এটি না মেলে, তাহলে ঐ মিলগুলো বাদ দিবে, এবং অনুসন্ধান চালিয়ে যাবে।
-More complex tests are possible, e.g. `pattern:X(?=Y)(?=Z)` means:
+আমরা আরো জটিল অনুসন্ধানও চালাতে পারি, যেমন `pattern:X(?=Y)(?=Z)` দ্বারা বুঝায়:
-1. Find `pattern:X`.
-2. Check if `pattern:Y` is immediately after `pattern:X` (skip if isn't).
-3. Check if `pattern:Z` is also immediately after `pattern:X` (skip if isn't).
-4. If both tests passed, then the `pattern:X` is a match, otherwise continue searching.
+১. প্রথমে `pattern:X` খুঁজবে।
+২. পরবর্তী অনুসন্ধান চালাবে যদি `pattern:X` এরপর `pattern:Y` থাকে(অন্যথায় বাদ যাবে)।
+৩. পরবর্তী অনুসন্ধান চালাবে যদি `pattern:X` এরপর `pattern:Z` থাকে(অন্যথায় বাদ যাবে)।
+৪. যদি উভয়ই অনুসন্ধান মিলে, তাহলে `pattern:X` রেজাল্ট দেখাবে।
-In other words, such pattern means that we're looking for `pattern:X` followed by `pattern:Y` and `pattern:Z` at the same time.
+অন্য কথায় বলা যায়, আমরা `pattern:X` কে এমনভাবে খুঁজছি যার পরে `pattern:Y` এবং `pattern:Z` থাকবে।
-That's only possible if patterns `pattern:Y` and `pattern:Z` aren't mutually exclusive.
+এটি অবশ্যই সম্ভব হবে যদি `pattern:Y` এবং `pattern:Z` পরস্পর সাংঘর্ষিক না হয়।
-For example, `pattern:\d+(?=\s)(?=.*30)` looks for `pattern:\d+` only if it's followed by a space, and there's `30` somewhere after it:
+যেমন, `pattern:\d+(?=\s)(?=.*30)` দ্বারা বুঝায় `pattern:\d+` এরপর একটি স্পেস থাকবে, এবং তারপর যেকোন অবস্থানে `30` থাকবে:
```js run
let str = "1 turkey costs 30€";
@@ -41,67 +41,67 @@ let str = "1 turkey costs 30€";
alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1
```
-In our string that exactly matches the number `1`.
+এক্ষেত্রে আমাদের প্রাপ্ত ফলাফলটি হবে `1`।
-## Negative lookahead
+## নেগেটিভ লুকঅ্যাহেড
-Let's say that we want a quantity instead, not a price from the same string. That's a number `pattern:\d+`, NOT followed by `subject:€`.
+চলুন আমরা দামের বদলে পরিমাণ খুঁজে বের করি। সুতরাং সংখ্যাটি হবে `pattern:\d+` যার পরে `subject:€` থাকবে না।
-For that, a negative lookahead can be applied.
+এজন্য আমরা, নেগেটিভ লুকঅ্যাহেড এর সাহায্য নিতে পারি।
-The syntax is: `pattern:X(?!Y)`, it means "search `pattern:X`, but only if not followed by `pattern:Y`".
+সিনট্যাক্সটি হবে: `pattern:X(?!Y)`, এটি দ্বারা বুঝায় "`pattern:X` কে খুঁজবে, কেবলমাত্র এরপর যদি `pattern:Y` না থাকে"।
```js run
let str = "2 turkeys cost 60€";
-alert( str.match(/\d+(?!€)/) ); // 2 (the price is skipped)
+alert( str.match(/\d+(?!€)/) ); // 2 (দামকে বাদ দেয়া হয়েছে)
```
-## Lookbehind
+## লুকবিহাইন্ড
-Lookahead allows to add a condition for "what follows".
+লুকঅ্যাহেড একটি শর্ত আরোপ করে "পরবর্তী অবস্থান"।
-Lookbehind is similar, but it looks behind. That is, it allows to match a pattern only if there's something before it.
+লুকবিহাইন্ড ও অনুরূপ, কিন্তু এটি পূর্বের অবস্থান খুঁজে। অর্থাৎ এটি মিলবে কেবল প্যাটার্নের পূর্বের কোন একটি প্যাটার্নের সাথে মিললে।
-The syntax is:
-- Positive lookbehind: `pattern:(?<=Y)X`, matches `pattern:X`, but only if there's `pattern:Y` before it.
-- Negative lookbehind: `pattern:(?