#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);
});
});
Проверьте демонстрацию
Ответ №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));