4

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] ";

1

8 Answers 8

6

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

Sign up to request clarification or add additional context in comments.

1 Comment

"improper" ? wow. downvoted for being improper posting code that works.
3

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()

3 Comments

Nope. defaultMsg='[This is my test]'; '[This is my test] [This is my test] My name is xyz.'.replace(defaultMsg,""); works too.
@mplungjan: Did you test your approach on the top 5 browsers and for different combinations of special characters? Check it against the ECMAScript spec? What happens if the programmer needs to use match(), test() or exec() instead? The only way that works in all cases is to properly escape the string.
But that is a different discussion. We are not talking match, test or exec, just replace the first occurrence of some string from another string. can be does with indexOf and length, but replace using a string works. Tested now you insist on Mozilla 1.7, FF3.6.6, Safari 5, Opera 10 and IE8 - granted it is on windows XP sp3, but I rest my case
0

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, ''));

2 Comments

Thanks folks, 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] ";
Then just call it on defaultMsg: alert(defaultMsg.replace(/\[This is my test\] /g, ''));
0

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,"");

1 Comment

Thanks folks, 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] ";
0

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, '');

1 Comment

Thanks folks, 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] ";
0
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));

Comments

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

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

Comments

0

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, '');

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.