Манипулирование строками с помощью javascript

#javascript #jquery

#javascript #jquery

Вопрос:

Я работаю над некоторыми манипуляциями со строками с использованием javascript.У меня есть senario, где мне нужно выполнить поиск в строке и удалить определенные слова.

Вот мой совет: когда я нажимаю «Click me», он должен искать слово во входных данных из строковой переменной, и если найдено соответствие, оно должно удалить это слово из входных данных.

Вот мой особый совет: при удалении слова из входных данных следует удалить : и целочисленное значение и запятую (если таковая имеется), которые стоят перед соответствующим словом.

В моем примере ввод 1: первый пользователь, 2: второй пользователь в текстовом поле, мне нужен вывод как 2: второй пользователь

Как я могу этого добиться

  <input id='textinput' type='text' value='1:first user,2:second user'></input>
 <div class='click'>Click me</div>
  
 $(document).ready(function () {
    $(".click").click(function () {
        var string = 'first user';
        $('#textinput').val().replace(/string/g, '');
    });
});
  

я создал скрипку http://jsfiddle.net/h9D5W /

Редактировать

здесь моя переменная string содержит только имена пользователей, я не могу добавить id к именам пользователей, например 1:first user, поэтому точного соответствия в строковой переменной не будет.

Комментарии:

1. не могли бы вы показать несколько примеров ввода и ожидаемого вывода?

Ответ №1:

Я удалил начальные цифры, подчеркивание и конечную запятую.

 $(document).ready(function () {

    $(".click").click(function () {
        var string = 'first user';
        var re = new RegExp('\d:*' string ',*',"g");
        var text = $('#textinput').val().replace(re, '');;
        $('#textinput').val(text);

    });
});
  

Проверьте демонстрацию

http://jsfiddle.net/yKfur/1/

Ответ №2:

В вашем коде JavaScript string является переменной. Вам нужно будет инициировать RegExp класс для генерации шаблона:

Также, пожалуйста, воздержитесь от использования имени переменной типа string . Это имя глобального объекта.

 var s = 'first user';
var x = $( '#textinput' ).val().replace(new RegExp(s, 'g'), '');
// use the new variable x as you wish
  

Комментарии:

1. Это оставит строку типа '1:,2:second user' , но я думаю, что OP хочет: '2:second user' .

Ответ №3:

Вы должны использовать RegExp , вам нужно инициализировать его строковой переменной.

Использовать

 $(".click").click(function () {
    var string = 'first user';
    var re = new RegExp(string,"g"); //initialize RegExp
    var text = $('#textinput').val().replace(re, ''); //Get replaced text
    $('#textinput').val(text);  //Reset its value      
});
  

ДЕМОНСТРАЦИЯ

Редактировать

здесь я не могу использовать 1: первый пользователь в переменной

 $(".click").click(function () {
    var arr = $('#textinput').val().split(','); //Here used split method to split string ',' as deliminator 
    $('#textinput').val(arr[arr.length - 1]);        
});
  

ДЕМОНСТРАЦИЯ

Комментарии:

1. Я думаю, что это должен быть правильный ответ, потому что только в этом решении новое значение устанавливается в текстовое поле.

2. этот код выведет 1:,2: второго пользователя. Но мне нужно удалить 1:, также

3. @пользователь3791078 — var string = '1:first user,'

4. здесь я не могу использовать 1: первый пользователь в переменной

5. здесь моя переменная string содержит только имена пользователей, я не могу добавить id к именам пользователей, например 1:first user, поэтому точного соответствия в строковой переменной не будет.

Ответ №4:

Вы можете использовать регулярное выражение типа:

  var text = '1:first user,2:second user,3:third user';

 var s = 'first user';

 var re = new RegExp('^\d :'   s   ',?|,\d :'   s   '\b');

 text.replace(re, '') // '2:second user,3:third user'
  

Я уверен, что есть более короткий вариант.

Ответ №5:

Я обновил вашу скрипку

сначала я разделяю вашу строку на массив

 var inputArr = ($('#textinput').val()).split(',');
  

таким образом, я могу проверять каждый набор слов с помощью for цикла,

     for (i = 0; i < inputArr.length; i  ) {

        if (inputArr[i].indexOf(string) == -1) {
            newStr = newStr   inputArr[i]   ',';
        }
    }
  

затем я устанавливаю новое значение, используя substring, чтобы исключить последнюю добавленную запятую.

 $('#textinput').val(newStr.substring(0, newStr.length - 1));