JavaScript извлекает хэштеги из строк

Попробуйте функцию .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>

1
задан Amir Shahbabaie 19 January 2019 в 12:23
поделиться

3 ответа

Вы можете использовать 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_] более одного раза, так что вы можете настроить его.

Как только у вас есть совпадения в массиве, вы можете изменить их в соответствии с вашими предпочтениями.

0
ответ дан maioman 19 January 2019 в 12:23
поделиться

Как насчет того, чтобы использовать регулярное выражение /#([\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(' '));

0
ответ дан Always Sunny 19 January 2019 в 12:23
поделиться

Шаблон #(\S*) будет соответствовать #, за которым 0+ раз будет непробельный символ в захваченной группе. Это также будет соответствовать одному #. Строка #World#place#live. не содержит пробельных символов, поэтому вся строка будет сопоставлена.

Вместо этого вы можете сопоставить их, используя класс отрицанных символов. Соответствие #, за которым следует отрицательный класс символов, который не соответствует символу # или пробелу.

#[^#\s]+

Regex demo

const strings = [
  "#World is a #good #place to #live.",
  "#World#place#live."

];
let pattern = /#[^#\s]+/g;

strings.forEach(s => {
  console.log(s.match(pattern));
});

0
ответ дан The fourth bird 19 January 2019 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: