문자열

Siwoo Pak·2021년 9월 11일
0

컴퓨터공학

목록 보기
1/8

문자열 접근

  • 문자 1개를 접근할 경우

    • .charAt(index)
    'dog'.charAt(1) // 'o'
  • 여러 문자를 접근할 때

    • substring(startIndex, endIndex), slice(startIndex, endIndex)
      'Youtube'.substring(1,2) // 'o'
      'Youtube'.substring(3,7) // 'tube'

문자열 비교

  • 대부분의 프로그래밍 언어에는 문자열을 비교할 수 있는 함수가 존재.
  • js에선 미안 연산자와 초과연산자를 사용해 이를 쉽게 수행가능
let a = 'a';
let b = 'b';
console.log(a<b); // true return
  • 하지만 다른 길이의 두 문자열을 비교한다면 문자열의 시작부터 비교하기 시작해 더 짧은 길이의 문자열의 길이만큼가지 비교한다.
let a='add', b='b';
console.log(a<b); // true return

a='add', b='ab';
cosole.log(a<b); // false return
  • 위의 예에서 'a'와 'b'를 비교해서 'b'가 큰 게 true이기에 true를 반환, 두번째 예는 첫번째 문자는 같고, 두번째 문자는 'd','b' 'd'>'b'가 크기에 false를 리턴

문자열 검색

  • indexOf(searchValue[, fromIndex])
  • 검색하고자 하는 문자열을 매개변수로 받음.
  • 선택적으로 검색 시작 인덱스를 지정하는 매개변수도 받음.
  • 위의 함수의 반환값은 일차하의 문자열의 인덱스를 반환
  • 없으면 -1 반환
  • 대소문자를 구분함
'Red Dragon'.indexOf('Red'); // 0 return
'Red Dragon'.indexOf('RedScale'); // -1 return
'Red Dragon'.indexOf('Dragon',0); // 4 return
'Red Dragon'.indexOf('Dragon',4); // 4 return
'Red Dragon'.indexOf('',0); // 9 return
  • 문자열의 문자가 존재하는지 확인하는 함수
const existInString = (str, search) => {
  return str.indexOf(search) !== -1;
}
console.log(existInString('red', 'r')); // true return
console.log(existInString('red', 'b')); // false
  • 문자열의 특정한 문자의 갯수 구하기
const countChar = (str, char) => {
  let cnt = 0;
  let pos = str.indexOf(char);
  while(pos !== -1) {
    cnt++;
    pos = str.indexOf(char, pos+1);
  }
  return cnt;
}  

let str = "He's my king from this day until his last day";
console.log(countChar(str, 'a')); // 3 return
  • 문자열이 특정 문자열로 시작하거나 끝나는 경우
    • startsWith(string), endsWith(string)
      'Red Dragon'.startsWith('Red'); // true return
      'Red Dragon'.endsWith('Dragon'); // true return
      'Red Dragon'.startsWith('Dragon'); // false
      'Red Dragon'.endsWith('Red'); // false

문자열 분해

  • split(separator)
    • 하나의 분리자를 입력받아 부분 문자열 배열을 생성
      let test = 'chicken, noodle, soup, broth';
      test.split(','); // ['chicken','noodle', 'soup', 'broth']
      test = 'soup';
      test.split(''); // ['s','o','u','p']

문자열 바꾸기

  • replace(string, replaceString)
    • 매개변수로 받은 첫번째 인자는 특정 문자열을, 두번째 인자는 그 특정문자열을 바꿀 다른 문자열
    "Wizard of Oz".replace("Wizard","Witch"); // "Witch of Oz" return

정규표현식

  • 검색패턴을 정의한 문자열들의 집합.
  • JS에는 정규 표현식에 사용할 수 있는 기본객체 RegExp가 포함됨
  • 한정자(flag)
    • i : 대소문자를 구분하지 않고 일치하는 문자열 검색
    • g : 전역적으로 일차하는 문자열을 검색(일치하는 문자열을 처음 발견한 이후 멈추는 대신 모든 일치하는 문자열을 찾는다.)
    • m : 다중열 문자열에 대해서도 일치하는 문자열을 검색함.
  • 객체 RegExp의 함수
    • search(): 문자열 내에 일치하는 문자열을 검색. 일치하는 문자열의 인덱스(시작)를 반환.
    • match(): 일치하는 문자열을 검색. 모든 일차하는 문자열을 반환.
  • JS String객체에서 정규표현식과 관련된 함수
    • exec(): 문자열 내에 일치하는 문자열을 검색. 일치하는 첫번째 문자열을 반환.
    • test(): 문자열 내에 일치하는 문자열 검색. true 또는 false를 반환.

기본 정규 표현식

  • ^ : 문자열/줄의 시작을 나타냄
  • \d : 모든 숫자를 검색
  • [abc] : 괄호 내의 모든 문자를 검색
  • [^abc]: 괄호내의 문자들을 제외한 모든 문자를 검색
  • [0-9] : 괄호 내의 모든 숫자를 검색
  • [^0-9] : 괄호 내의 숫자들의 제외한 모든 숫자를 검색
  • (x|y) : x 또는 y를 검색
let str = 'JavaScript DataStructures';
let n = str.search(/DataStructures/);
console.log(n); // 11 return

자주 사용하는 정규 표현식

  • 숫자를 포함하는 문자(/\d+/)
let reg = /\d+/;
reg.test("123"); // true return
reg.test("33asd"); // true return
reg.test("5asdasd"); // true return
reg.test("asdasd"); // false return
  • 숫자만 포함하는 문자(/^\d+$/)
let reg = /^\d+$/;
reg.test("123"); // true return
reg.test("33asd"); // false return
reg.test("a"); // false return
  • 부동소수점 문자(/^[0-9].[0-9][1-9]+$/)
let reg = /^[0-9]*.[0-9]*[1-9]+$/;
reg.test("12") // true return
reg.test("12.2") // true return
  • 숫자와 알파벳만을 포함하는 문자(/[a-zA-Z0=9]/)
let reg = /[a-zA-Z0=9]/;
reg.test("somethingELSE"); // true return
reg.test("112") // true return
reg.test("112a") // true return
reg.test("^"); // false return
  • 질의 문자열(/([^?=&]+)(=([^&]*))/)
let uri = "http://your.domain/product.aspx?category=4&product_id=2140&query=lcd+tv";
let queryString = {};
uri.replace(
  new RegExp("([^?=&]+)(=([^&]*))?", "g"),
  function($0,$1,$2,$3){ queryString[$1] = $3;}
)
console.log('ID: ' + queryString['product_id']); // ID:2140 return
console.log('Name:' + queryString['product_name']); // Name: undefined return
console.log('Category:' + queryString['category']); // Category: 4 return
profile
'하루를 참고 인내하면 열흘을 벌 수 있고 사흘을 참고 견디면 30일을, 30일을 견디면 3년을 벌 수 있다.'

0개의 댓글