Регулярное выражение для замены первого совпадения в JavaScript - PullRequest
4 голосов
/ 14 июля 2010

У меня есть ниже тестовые случаи в качестве ввода:

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

    Хотите Ожидаемый результат как:
    [This is my test] My name is xyz.
    ,

  2. [This is my test] My name is xyz.
    Хотите получить ожидаемый результат как:
    My name is xyz.

Для приведенных выше тестовых случаев я хочу заменить только первое вхождение '[Это мой тест]' пустым. Я не хочу заменять второе вхождение матча.

Как мне решить эту проблему с помощью регулярных выражений в JavaScript?

Заранее спасибо.

ETA:

Я просто хочу дать больше пояснений: я не хочу использовать жестко закодированное значение в регулярном выражении, я хочу использовать переменную в регулярном выражении.
Предположим, что [This is my test] хранится в одной переменной, т.е. var defaultMsg = "[This is my test] ";

Ответы [ 8 ]

6 голосов
/ 14 июля 2010

Кто-нибудь пробовал это?

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

Нет необходимости в регулярном выражении и замене, не заботятся о специальных символах, если исходная строка не является объектом регулярного выражения, а просто строкой.Протестировано Mozilla 1.7, FF3.6.6, Safari 5, Opera 10 и IE8 для Windows XP sp3.Не уверен, что понимаю, почему это было отклонено, если он выполняет работу с минимумом суеты.

, чтобы заменить все вхождения, добавьте ag (примечание: это не стандартно):

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

заменить MDN

3 голосов
/ 14 июля 2010

Если шаблон поиска находится в строковой переменной и может содержать специальные символы, его необходимо экранировать.Вот так:

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()
0 голосов
/ 14 июля 2010
var originalText = '[This is my test] [This is my test] My name is xyz.';
var defaultMsg = "[This is my test] ";

alert( originalText.replace( defaultMsg , '' ) );
0 голосов
/ 14 июля 2010

Это поможет:

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, '');
0 голосов
/ 14 июля 2010
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));
0 голосов
/ 14 июля 2010

Это будет делать то, что вы хотите:

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

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

Чтобы заменить все вхождения ' [Это мой тест] ' вам нужно позвонить:

str = str.replace(/\[This is my test\]/g,"");
0 голосов
/ 14 июля 2010

Конечно. Используйте replace():

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

Если вы хотите заменить все вхождений:

alert(s.replace(/\[This is my test\] /g, ''));
0 голосов
/ 14 июля 2010

Функция JavaScript replace по умолчанию не является глобальной, поэтому она заменяет только первое совпадение:

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

Если вы хотите заменить все вхожденийстроки затем сделайте регулярное выражение глобальным, добавив g:

var bar = foo.replace(/\[This is my test\]\s/g, '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...