Вот почему динамически созданные элементы не реагируют на клики & nbsp;:
var body = $("body");
var btns = $("button");
var btnB = $("<button>B</button>");
// `<button>B</button>` is not yet in the document.
// Thus, `$("button")` gives `[<button>A</button>]`.
// Only `<button>A</button>` gets a click listener.
btns.on("click", function () {
console.log(this);
});
// Too late for `<button>B</button>`...
body.append(btnB);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>
В качестве обходного пути вы должны прослушивать все клики и проверять исходный элемент & nbsp;:
var body = $("body");
var btnB = $("<button>B</button>");
var btnC = $("<button>C</button>");
// Listen to all clicks and
// check if the source element
// is a `<button></button>`.
body.on("click", function (ev) {
if ($(ev.target).is("button")) {
console.log(ev.target);
}
});
// Now you can add any number
// of `<button></button>`.
body.append(btnB);
body.append(btnC);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>
Это называется «Event Delegation». Хорошие новости, это встроенная функция в jQuery: -)
var i = 11;
var body = $("body");
body.on("click", "button", function () {
var letter = (i++).toString(36).toUpperCase();
body.append($("<button>" + letter + "</button>"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>
foo@bar.com
⇒ f**@b**.com
(текущий вопрос) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
(см. демо-версия regex ) foo@bar.com
⇒ f**@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(см. демо-версия regex ) foo@bar.com
⇒ f*o@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(см. ] demo [regex] ) foo@bar.com
⇒ f**@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(см. демо-версия ) foo@bar.com
⇒ f*o@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(см. демо-версия regex ) Если вы не можете использовать кнопку на основе кода , вы можете использовать
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
См. демонстрацию regex
Что он делает:
(?<=.)[^@](?=[^@]*?@)
-any char, отличный от @
([^@]
), которому предшествует любой одиночный символ ((?<=.)
), за которым следуют любые 0 или более символов, кроме @
, до a @
((?=[^@]*?@)
) |
- или (?:(?<=@.)|(?!^)\\G(?=[^@]*$))
- соответствует местоположению в строке, которой предшествуют @
и любой символ ((?<=@.)
) или (|
) конец предыдущего успешного совпадения ((?!^)\\G
), за которым следуют любые символы 0+, отличные от @
uo до конца строки ((?=[^@]*$)
) .
- любой одиночный символ (?=.*\\.)
- за ним следуют любые символы 0+ до последнего символа .
в строке. Как насчет этого, если вам не нужны маски с одинаковым количеством символов исходных строк (что более анонимно):
(?<=^.)[^@]*|(?<=@.).*(?=\.[^.]+$)
Например, если вы замените совпадения на ***
, результатом будет:
j***@e***.com
\S+@\S+
не выполнил бы, для большинства адресов электронной почты? – Robert 24 March 2017 в 17:32