logo
Published on

자료구조 for JS : String

Authors
  • avatar
    Name
    Bora Choi
    Twitter

자바스크립트 원시 타입 String

string 원시타입은 다양한 일반적인 string함수를 제공한다.

문자열 접근

문자에 접근하기 위해 .charAt(index)을 사용한다. index에 위치한 문자를 반환한다.

'dog'.charAt(1) // returns "o"

문자열(복수의 문자)에 접근 하기 위해서는 .substring(startIndex,endIndex)을 사용한다. (endIndex)를 넘기지 않으면 시작 인덱스부터 끝까지 반환한다.

'YouTube'.substring(1, 2) // returns 'o'
'YouTube'.substring(3, 7) // returns 'tube'
'YouTube'.substring(1) // returns 'outube'

문자열의 비교

대부분의 프로그래밍 언어가 문자열을 비교하는 함수를 제공하지만 자바스크립트에서는 단순하게 <,> 연산자를 사용하여 비교한다.

var a = 'a'
var b = 'b'
console.log(a < b) // prints 'true'

길이가 다른 두 문자열을 비교할 때에는 문자열이 길이가 작은 문자열의 길이까지 비교한다.

var a = 'add'
var b = 'ab'
console.log(a < b) // prints 'false'

console.log('add' < 'ab' == 'ad' < 'ab') // prints 'true'

문자열 검색

문자열이서 특정한 문자를 검색할 때에는 .indexOf(searchValue[, fromIndex])를 사용할 수 있다. 문자열의 시작 인덱스를 반환하고 존재하지 않으면 -1을 반환한다.

'Red Dragon'.indexOf('Red') // returns 0
'Red Dragon'.indexOf('RedScale') // returns -1
'Red Dragon'.indexOf('Dragon', 0) // returns 4

문자열이 특정 문자열로 시작하거나 끝나는지 .startsWith.endsWith 를 사용하여 알 수 있다.

'Red Dragon'.startsWith('Red') // returns true
'Red Dragon'('Dragon') // returns true
'Red Dragon'.startsWith('Dragon') // returns false
'Red Dragon'.endsWith('Red') // returns false

문자열 분해

문자열을 부분적으로 분해할 때 .split(separator)를 사용하여 부분을 배열로 만들수 있다.

var test1 = 'chicken,noodle,soup,broth'
test1.split(',') // ["chicken", "noodle", "soup", "broth"]

빈 문자열을 인수로 보내면 모든 문자를 배열로 만들어 반환한다

var test1 = 'chicken'
test1.split('') // ["c", "h", "i", "c", "k", "e", "n"]

문자열 대체

.replace(string, replaceString)은 특정 부분의 문자열을 다른 문자열로 대체한다.

'Wizard of Oz'.replace('Wizard', 'Witch') // "Witch of Oz"

정규 표현식

정규식은 검색 패턴을 정의하는 문자의 집합이다. 자바스크립트에서는 정규표현식를 위해 RegExp 객체를 제공한다. RegExp 생성자 함수는 정규식과 플래그를 인수로 갖는다.

RegExp 는 두개의 함수를 갖는다.

search(): 패턴과 매치하는 문자의 인덱스를 반환한다.

match(): 패턴과 매치하는 모든 문자를 반환한다.

자바스크립트의 String 객체도 정규식과 관련된 두가지 함수를 가지고 있다.

exec(): 패턴과 매치하는 첫번째 문자열을 반환한다.

test(): 패턴과 매치하는지 boolean으로 반환한다.

기본 정규식

^: 문자열, 행의 시작

\d: 임의의 숫자

[abc]: 대괄호 안에 있는 아무 문자

[^abc]: 대괄호 안에 있는 문자가 아닌 것

[0-9]: 대괄호 안에 있는 숫자 사이의 값

[^0-9]: 대괄호 안에 있는 숫자사이의 값이 아닌 것

(x|y): 특정된 것 중 아무 값

var str = 'JavaScript DataStructures'
var n = str.search(/DataStructures/)
console.log(n) //11

자주 쓰이는 정규식

아무 숫자/\d+/

숫자만 /^\d+$/

소수/^[0-9]*.[0-9]*[1-9]+$/

영숫자 /[a-zA-Z0-9]/

쿼리문자 /([^?=&]+)(=([^&]*))/

인코딩

인코딩은 효율적인 전송 또는 저장을 위한 특수한 형식으로 문자를 나타내는 컴퓨터 과학의 일반적인 개념이다. 모든 컴퓨터 파일 유형은 특정 구조에 인코딩 된다.

Base64 Encoding

btoa() 함수는 문자열을 Base64로 인코딩된 ASCII 문자로 만든다. .atob() 함수는 Base64인코딩을 디코딩하는 함수이다.

문자열 압축

단순화된 URL 압축 알고리즘은 특정한 구조를 따른다.

  1. 데이터 베이스는 URL에 대한 고유한 정수 기반 ID를 만든다.
  2. 정수 ID가 문자열로 단축된다. Base62 인코딩으로 단축되면 11231230 은 VhU2가 된다.

암호화

암호화는 사람들의 정보를 온라인에서 보호할때 굉장히 중요하다.

액세스 하려는 웹 사이트에서 적절한 보안 소켓 계층 (Secure Socekts Layer,SSL) 인증서가 없다는 것을 의미한다.

TSL은 서버와 클라이언트(브라우저)간에 암호화된 링크를 설정하기 위한 표준 보안 기술이다.

TSL프로세스의 단순화 단계

⇒ 이 과정에서 비대칭 암호화(공개 키 암호 방식)는 서버의 암호화 및 암호 해독을 위해 다른 키에 사용된다.

브라우저는 데이터를 암호화하고 해독하기 위해 단일 키를 사용하는 대칭 암호화만 사용한다.

  1. 서버는 비대칭 공개 키를 브라우저에 보낸다.
  2. 브라우저는 서버의 비대칭 공개 키에 의해 암호화된 현재 세션에 대한 대칭키를 만든다.
  3. 서버는 개인 키를 통해 브라우저의 세션을 해독하고 세션 키를 검색한다.
  4. 두 시스템 모두 세션 키를 가지고 있으며 이를 사용하여 데이터를 안전하게 전송한다.

브라우저와 서버만 세션 키를 알고있기 때문에 안전하다.

브라우저가 다음 날 동일한 서버에 연결하려면 새 세션 키가 만들어진다. SSL 경고 메시지는 브라우저와 서버가 해당 연결의 데이터를 암호화하지 않을 수 있다는 것이다.

가장 일반적으로 사용되는 공개 키 암호화 알고리즘은 RSA 알고리즘이다.

RSA 암호화

function modInverse(e, phi) {
  var m0 = phi,
    t,
    q
  var x0 = 0,
    x1 = 1

  if (phi == 1) return 0

  while (e > 1) {
    q = Math.floor(e / phi)
    t = phi
    ;(phi = e % phi), (e = t)

    t = x0

    x0 = x1 - q * x0

    x1 = t
  }

  if (x1 < 0) x1 += m0

  return x1
}
modInverse(7, 40) //23
function RSAKeyPair(p, q) {
  if (!(isPrime(p) && isPrime(q))) return

  if (p == q) return

  var n = p + q,
    phi = p - 1 + (q - 1),
    e = 3,
    d = modInverse(e, phi)

  return [
    [e, n],
    [d, n],
  ]
}