Найти текст между двумя цитатами с помощью jQuery
ok, поэтому у меня есть этот небольшой блок текста:
function onfocus(event) {
if ($(this).val() == "Some Arbitrary Text") {$(this).val("");}
}
Используя jQuery или JavaScript, я хотел бы найти "Арбитражный текст". Этот текстовый блок является постоянным, за исключением "Произвольного текста". В идеале, мне нужен способ проанализировать его без использования сложных циклов и регулярных выражений.
Чтобы помочь пояснить:
Тот факт, что текст javascript не играет никакой роли. Думайте об этом как о тексте, который я разбираю. "Арбитражный текст" может быть любым, я пытаюсь найти текст между двумя кавычками.
Ответы
Ответ 1
Не то, чтобы я полностью понял вопрос, но, может быть,
var s = 'foo "quoted" bar';
var m = s.match(/"(.*?)"/);
alert(m[1]); // m[1] = quoted
Конечно, это также возможно без регулярных выражений, но это не имеет смысла - это то, что регулярные выражения для
Ответ 2
var text = $(this).val().replace(/"(.*?)"/ig, "$1");
Ответ 3
Ваш вопрос немного запутанный - вы хотите посмотреть, содержит ли большая строка меньшую строку? Если это так, используйте функцию indexOf
следующим образом:
function onfocus(event) {
if ($(this).val().indexOf("Some Arbitrary Text") > 0) {
$(this).val("");
}
}
Ответ 4
var stringToSearchFor = 'if ($(this).val() == "';
var haystack = 'put your javascript code here';
var startPosition = haystack.indexOf(stringToSearchFor);
Ответ 5
Если я правильно интерпретирую ваш вопрос, вам просто нужно регулярное выражение:
astring = "oh hai I'm a string my name is \"Arbitrary Text\"";
results = astring.match(/"[\d\w\s]*"/g);
Регулярное выражение /"[\d\w\s]*"/
будет соответствовать любым символам цифр, слов или пробелов, появляющимся между перевернутыми запятыми. Суффикс g
указывает, что поиск является глобальным, и возвращает массив всех совпадений. Удаление g просто вернет первый результат.
В этом случае match()
возвращает массив из 1 члена: ['"Arbitrary Text"']
. Да, он включает в себя перевернутые запятые. Чтобы удалить их: string = string.replace(/"/g, '');
Null возвращается, если в тексте не найдено совпадения.
Хороший javascript-regexp cheatsheet здесь.
Edit
Теперь, когда мы понимаем ваше обоснование для этого, я должен рекомендовать против этого метода.
Существует несколько способов сравнить текст ввода формы с его значением по умолчанию. Вы можете сохранить значение по умолчанию в глобальной переменной JS, например, или как атрибут самого элемента html.
Это не значит, что ваш метод "неправильный", но этот код имеет серьезный аромат.
Ответ 6
Я предполагаю, что вы действительно показываете какое-то сообщение "приглашение" внутри элемента ввода, например, например: "введите свое имя здесь" внутри текстового ввода. Конечно, вы хотите, чтобы это приглашение исчезло, как только пользователь сосредоточится на этом вводе, и повторите его, если пользователь ничего не вставил на вход. Цель правильная, но ваш подход немного грязный и ненадежный. Вместо этого я использовал бы переменные.
Поскольку ваши входы добавляются динамически, просто добавьте переменную внутри < тег script > сразу после инъекции html. например:
document.write('<input id="controller24" type="text" name="email" value="Put your name here"/><script>var controller24Default="Put your name here";</script>');
После этого вы должны привязать этот контроллер к общей функции, которая восстанавливает переменную по умолчанию из значения входного идентификатора. var thisDefaultValue = eval("controller"+this.id+"Default")
. Просто идея.