Попробуйте функцию .each()
, как показано ниже:
function getViewportOffset($e) {
var $window = $(window),
scrollLeft = $window.scrollLeft(),
scrollTop = $window.scrollTop(),
offset = $e.offset(),
rect1 = { x1: scrollLeft, y1: scrollTop, x2: scrollLeft + $window.width(), y2: scrollTop + $window.height() },
rect2 = { x1: offset.left, y1: offset.top, x2: offset.left + $e.width(), y2: offset.top + $e.height() };
return {
left: offset.left - scrollLeft,
top: offset.top - scrollTop,
insideViewport: rect1.x1 < rect2.x2 && rect1.x2 > rect2.x1 && rect1.y1 < rect2.y2 && rect1.y2 > rect2.y1
};
}
$(window).on("load scroll resize", function() {
$(".element").each(function(){
var viewportOffset = getViewportOffset ($(this));
var valueprimo = viewportOffset.top - 350;
if (viewportOffset.top < 130) {
$(this).css("transform", "rotatez(-55deg) rotate(-45deg) translate(0,0)");
}
else if (viewportOffset.top > 343) {
$(this).css("transform", "rotatez(0deg) rotate(-45deg) translate(0,0)");
}
else if (viewportOffset.top > 130) {
$(this).css("transform", "rotatez(" + valueprimo / 4 + "deg) rotate(-45deg)) translate(0,0)");
}
});
});
body {height: 2048px}
.element {position: absolute;
top: 400px; left: 30px;
width: 107px;
height:107px;
background-color: #707070}
#secondo {position: absolute;
top: 450px; left: 150px;
}
#terzo {position: absolute;
top: 550px; left: 270px;
}
#quarto {position: absolute;
top: 650px; left: 150px;
}
#quinto {position: absolute;
top: 450px; left: 510px;
}
#sesto {position: absolute;
top: 350px; left: 630px;
}
#settimo {position: absolute;
top: 650px; left: 450px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="primo" class="element" name="element"></div>
<div id="secondo" class="element" name="element"></div>
<div id="terzo" class="element" name="element"></div>
<div id="quarto" class="element" name="element"></div>
<div id="quinto" class="element" name="element"></div>
<div id="sesto" class="element" name="element"></div>
<div id="settimo" class="element" name="element"></div>
Вы можете использовать String.match с регулярным выражением #\w+
:
var str = `
type 1. #World is a #good #place to #live.
type 2. #World#place#live.`
var matches = str.match(/#\w+/g)
console.log(matches)
[ 112] соответствует любому символу слова [a-zA-Z0-9_] более одного раза, так что вы можете настроить его.
Как только у вас есть совпадения в массиве, вы можете изменить их в соответствии с вашими предпочтениями.
Как насчет того, чтобы использовать регулярное выражение /#([\w]+\b)/gm
и соединить пробелом , как показано ниже, чтобы извлечь
#hastags
из вашей строки? ИЛИ Вы можете использовать str.replace(/\b#[^\s#]+/g, " [114]amp;")
, как прокомментировано @Wiktor
function findHashTags(str) {
var regex = /#([\w]+\b)/gm;
var matches = [];
var match;
while ((match = regex.exec(str))) {
matches.push(match[0]);
}
return matches;
}
let str1 = "#World is a #good #place to #live."
let str2 = "#World#place#live";
let res1 = findHashTags(str1);
let res2 = findHashTags(str2);
console.log(res1.join(' '));
console.log(res2.join(' '));
Шаблон #(\S*)
будет соответствовать #
, за которым 0+ раз будет непробельный символ в захваченной группе. Это также будет соответствовать одному #. Строка #World#place#live.
не содержит пробельных символов, поэтому вся строка будет сопоставлена.
Вместо этого вы можете сопоставить их, используя класс отрицанных символов. Соответствие #, за которым следует отрицательный класс символов, который не соответствует символу # или пробелу.
#[^#\s]+
const strings = [
"#World is a #good #place to #live.",
"#World#place#live."
];
let pattern = /#[^#\s]+/g;
strings.forEach(s => {
console.log(s.match(pattern));
});