Найти текст между двумя цитатами с помощью 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"). Просто идея.