JavaScript의 정규 표현인 Replace에 중첩된 div를 플랫화(flatten)하여 작은 요소가 없는 div를 제거합니다.

더 좋은 정규 표현 방법이 있으면 알려주세요.
npm 패키지를 사용하면 쉽게 완성할 수 있을 것 같아요.
CDN에서 책갈피를 읽고 싶지 않을 뿐입니다.

TL;DR

  • 중첩된 div를 평탄화(flaten)

  • 반복targetString.replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")몇 번
  • 작은 요소가 없는div 삭제

  • 반복targetString.replace(/<div>\s*<div>([^>]*)<\/div>\s*<\/div>/gs, "<div>$1</div>")몇 번
  • 왜 그랬어


    책갈피 만드는 중
  • 끼워 넣은 div를 평탄화(flaten)
  • 요소 없는div
  • 제거
    리플렉스로 어떻게든 해보고 싶어서 했어요.

    어떻게 해야만 각자의 정규 표현식에 도달할 수 있습니까


    정규 표현식 체크카드로 생각하면서 괜찮은 웃음.
    추천하는 정규 표현 검사는 이 두 가지다.
  • refular expressions 101
  • https://regex101.com/
  • 정규 표현식 교체 검사기(JavaScript 버전) | Softtel labs
  • https://www.softel.co.jp/labs/tools/replace/
  • 자바스크립트의 정규 표현 검사 2선 | 북산순도 |zen
  • 나도 여기 적었어
  • https://zenn.dev/junki555/articles/26f50b080bd4aa
  • 중첩된 div 플랫화(flaten)


    일단 평탄화라는 표현이 맞는지 모르겠어요.
    예를 들다
    이런 HTML
    <div><div><div><div>foo</div></div></div></div>
    <div>
      <div>
        <div><div>bar</div></div>
      </div>
    </div>
    <div><div>baz</div></div>
    
    이렇게 하고 싶어요.
    <div>foo</div>
    <div>bar</div>
    <div>baz</div>
    
    마침내 도착한 것은
    반복targetString.replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")이런 방법으로 코드는 이렇게 하는 것이다.더러워..😂
    targetString
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")
      .replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>");
    
    기타
    targetString
      .replace(/<div>\s*<div>\s*<div>(.*)<\/div>\s*<\/div>\s*<\/div>/gs, "<div>$1</div>");
    
    이렇게 여러 개의 플러그를 단숨에 간단한div링으로 변환할 수 있다
    이 정규 표현식이라면 플러그인 모드를 준비해야 합니다
    몇 번 반복하면 기본적으로 문제가 없기 때문에 나는 끼워 넣는 것을 취소하기로 결정했다.
    2010/12/23 추기
    @catnose라는 댓글이 왔어요.replace(/<div>\s*<div>(.*)<\/div>\s*<\/div>/gs, "<div>$1</div>")의 부분은 이것이라면 끼워 넣을 때 폐쇄 라벨</div>이 일치하지 않을 수 있습니다.
    그래서text.replace(/<div>\s*<div>([^>]*)<\/div>\s*<\/div>/gs, "<div>$1</div>")듣건대
    사용법while을 제시했으니 댓글을 달아보세요.
    replace의 replace(/../gs,'') 이 부분의 s
    ES 2018년 이후의 선택이다.Can i use .. 대부분의 브라우저가 이미 대응한 것 같다.
    s("dotAll") 플래그가 진짜로 설정된 경우 줄 바꿈도 일치합니다.
  • 정규 표현식 - JavaScript | MDN
  • https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
  • JavaScript built-in: RegExp: dotAll | Can i use
  • https://caniuse.com/?search=dotall
  • 평탄한 표현
    다차원 배열을 일차원 배열로 바꾸는 평탄화(flaten)와 좀 닮았기 때문이다.
  • Ruby 2.7.0 참조 매뉴얼 라이브러리 일람 포함 라이브러리 Aray 클래스 flaten
  • https://docs.ruby-lang.org/ja/latest/method/Array/i/flatten.html
  • Array.prototype.flat() | MDN
  • https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
  • 파이톤에서flaten(다차원 목록을 1차원 평탄화)|note.nkmk.me
  • https://note.nkmk.me/python-list-flatten/
  • 작은 요소 없음div 삭제


    <div></div>
    <div><div></div></div>
    <div><div><div></div></div></div>
    
    이런 거 없애고 싶어요.
    도착하는 정규 표현식은
    반복targetString.replace(/<div>\s*<\/div>/g, "")그리고 코드는 이렇습니다.이것도 더러워..😂
    targetString
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "")
      .replace(/<div>\s*<\/div>/g, "");
    
    이것도 겹쳐서 여러 개의div 부분을 바꿀 수 있어요.
    나는 우직한 방법이 비교적 간단하다고 생각해서 이렇게 한다.
    더 좋은 방법이 있으면 알려주세요.😂

    좋은 웹페이지 즐겨찾기