pravin
pravin

Reputation: 2155

Regex to replace first occurence of match in javascript

I have below test cases as input:

  1. [This is my test] [This is my test] My name is xyz.

    Want Expected output as :
    [This is my test] My name is xyz.
    .

  2. [This is my test] My name is xyz.
    Want Expected output as:
    My name is xyz.

For above test cases I want to replace only first occurrence of '[This is my test] ' with blank. I don't want to replace second occurrence of match.

How do I resolve this using regex in JavaScript?

Thanks in advance.

ETA:

I just want to give more clarification that, i dont want to use hard coded value in regex , i want to use variable in regex.
Assume that [This is my test] is stored in one variable i.e. var defaultMsg = "[This is my test] ";

Upvotes: 4

Views: 13670

Answers (8)

mplungjan
mplungjan

Reputation: 177688

Anyone try this?

<script>
var defaultMsg ="[This is my test]"
var str         = "[This is my test] [This is my test] My name is xyz.";
str=str.replace(defaultMsg,"");
alert(str);
</script>

No need for regexp and replace does not care about special chars if the source string is not a regular expression object but just a string. Tested Mozilla 1.7, FF3.6.6, Safari 5, Opera 10 and IE8 windows XP sp3. Not sure I understand why this was voted down if it does the job with a minimum of fuss.

to replace all occurrences, add a g (note: this is not standard):

str=str.replace(defaultMsg,"","g"); // "gi" for case insensitivity 

replace MDN

Upvotes: 6

Brock Adams
Brock Adams

Reputation: 93443

If the search pattern is in a string variable and can contain special characters, then it must be escaped. Like so:

var defaultMsg  = "[This is my test] ";

//-- Must escape special characters to use in a RegEx.
defaultMsg      = defaultMsg.replace (/([\!\$\(\)\*\+\.\/\:\=\?\[\\\]\^\{\|\}])/g, "\\$1")

var zRegEx      = new RegExp (defaultMsg, '');

var Str         = '[This is my test] [This is my test] My name is xyz.';

Str             = Str.replace(zRegEx, "");

console.log (Str);  //-- Or use alert()

Upvotes: 3

Toto
Toto

Reputation: 91375

This will do the trick:

var foo = '[This is my test] ';// or whatever you want
foo = foo.replace(/([\[\]])/, '\\$1', 'g'); // add all special chars you want
var patern = new RegExp(foo);
var myString = '[This is my test] [This is my test] My name is xyz.';
var result = myString.replace(patern, '');

Upvotes: 0

Gabriele Petrioli
Gabriele Petrioli

Reputation: 195972

var originalText = '[This is my test] [This is my test] My name is xyz.';
var defaultMsg = "[This is my test] ";

alert( originalText.replace( defaultMsg , '' ) );

Upvotes: 0

klox
klox

Reputation: 2093

var str="[This is my test] [This is my test] My name is xyz.?";
var patt1=(/[[This is my test]].*My name is xyz/i);
document.write(str.match(patt1));

Upvotes: 0

LukeH
LukeH

Reputation: 269308

The JavaScript replace function defaults to non-global so it only replaces the first match:

var foo = '[This is my test] [This is my test] My name is xyz.';
var bar = foo.replace(/\[This is my test\]\s/, '');

If you wanted to replace all occurrences of the string then make the regex global by appending a g:

var bar = foo.replace(/\[This is my test\]\s/g, '');

Upvotes: 0

Thariama
Thariama

Reputation: 50832

This will do what you want:

str= '[This is my test] [This is my test] My name is xyz.';

str = str.replace(/\[This is my test\]/,"");

To replace all occurences of '[This is my test]' you need to call:

str = str.replace(/\[This is my test\]/g,"");

Upvotes: 0

cletus
cletus

Reputation: 625027

Sure. Use replace():

var s = "[This is my test] [This is my test] My name is xyz.";
alert(s.replace(/\[This is my test\] /, ''));

If you want to replace all occurrences:

alert(s.replace(/\[This is my test\] /g, ''));

Upvotes: 0

Related Questions