[JS 학습 노트] 5 장
ECMAScript 는 RegExp 형식 을 통 해 정규 표현 식 을 지원 합 니 다.var expression = /pattern / flags; pattern 모드 는 정규 표현 식 입 니 다.
정규 표현 식 은 3 개의 표준 조합 체 (i, g, m) m 다 중 줄 모드 입 니 다. 한 줄 의 텍스트 끝 에 도 달 했 을 때 다음 줄 에 패턴 과 일치 하 는 항목 이 있 는 지 계속 찾 습 니 다.
모든 메타 문 자 는 정규 표현 식 에 한 가지 또는 여러 가지 특수 한 용도 가 있 기 때문에 문자열 에 포 함 된 이 문자 들 과 일치 하려 면 전 의 를 해 야 합 니 다.
var pattern1 = /[bc]at/i;// "bat" "cat",
var pattern2 = /\[bc\]at/i;// "[bc]at",
var pattern1 =/.at/gi;// “at” 3 ,
var pattern2=/\.at/gi;// ".at",
다른 하 나 는 구조 함수 로 2 개의 인자 var pattern 1 = / [bc] at / i 를 받 습 니 다.var pattern2 = new RegExp("[bc]at","i");
RegExp 실례 방법
RegExp 대상 의 주요 방법 은 exec () 이 고 이 방법 은 포획 팀 을 위해 설계 되 었 다.패턴 을 적용 할 문자열 을 받 아들 이 고 첫 번 째 일치 하 는 정 보 를 포함 하 는 배열 을 되 돌려 줍 니 다.일치 하 는 항목 이 없 는 상태 에서 null 로 돌아 갑 니 다.돌아 오 는 배열 은 Array 의 인 스 턴 스 입 니 다. 2 개의 속성 을 포함 합 니 다. index (문자열 에 있 는 위치 와 일치 하 는 항목) 와 input (정규 표현 식 을 사용 하 는 문자열 을 표시 합 니 다).배열 에서 첫 번 째 항목 은 전체 패턴 과 일치 하 는 문자열 입 니 다. 다른 항목 은 패턴 의 캡 처 그룹 과 일치 하 는 문자열 입 니 다. (캡 처 그룹 이 없 으 면 이 배열 은 한 가지 만 포함 합 니 다)
캡 처 그룹 은 정규 표현 식 중성자 식 과 일치 하 는 내용 을 말 합 니 다. 메모리 에 숫자 번호 나 명시 적 이름 을 가 진 그룹 에 저장 하여 나중에 참조 하기 편리 합 니 다.
var text = "mom and dad and baby";
var pattern = /mom( and dad ( and baby )?)?/gi;
var matches = pattern.exec(text);
alert(matches.index);//0
alert(matches.input);//"mom and dad and baby"
alert(matches[0]);//"mom and dad and baby"
alert(matches[1]); //"and dad and baby"
alert(matches[2]);//"and baby"
exec () 방법 에 있어 서 모드 에 전역 표 지 를 설정 하 더 라 도 매번 일치 하 는 항목 만 되 돌려 주 고 전역 표 지 를 설정 하지 않 으 며 같은 문자열 에서 exec () 를 여러 번 호출 할 때마다 첫 번 째 일치 하 는 항목 의 정 보 를 되 돌려 줍 니 다.전역 플래그 를 설정 합 니 다. exec () 를 호출 할 때마다 문자열 에서 새 일치 하 는 항목 을 계속 찾 습 니 다.
var text = "car,bat,sat,fat";
var pattern1 =/.at/;
var matches = pattern1.exec(text);
alert(matches.index);//0
alert(matches[0]);//cat
alert(pattern1.lastIndex);//0
matches = pattern1.exec(text);
alert(matches.index);//0
alert(matches[0];//cat
alert(matches.lastIndex);//0
var pattern2=/.at/g;
var matches = pattern2.exec(text);
alert(matches.index);//0
alert(matches[0]);//cat
alert(pattern2.lastIndex);//3
matches = pattern.exec(text);
alert(matches.index);//5
alert(matches[0]);//bat
alert(matches.lastIndex);//8
다른 방법 test ()
이것 은 문자열 파 라미 터 를 받 아들 여 패턴 이 이 파라미터 와 일치 하 는 상황 에서 true 를 되 돌려 줍 니 다. 그렇지 않 으 면 false 를 되 돌려 줍 니 다.대상 문자열 이 어떤 패턴 과 일치 하 는 지 알 고 싶 지만 텍스트 내용 을 알 필요 가 없 는 경우 이 방법 은 매우 편리 합 니 다.
var text = "000-00-0000";
var pattern = /\d{3}-\d{2}-\d{4}/;
if (pattern.test(text)){
alert("The pattern was matched.");
}
구조 함수 의 속성
RegExp 구조 함 수 는 일부 속성 을 포함 하고 있 으 며, 이러한 속성 은 역할 영역 에 있 는 모든 정규 표현 식 에 적용 되 며, 실 행 된 최근 정규 표현 식 작업 에 따라 달라 집 니 다.짧 은 속성 명 을 사용 하면 대부분 유효한 ECMAScript 식별 자가 아니 기 때문에 괄호 로 접근해 야 합 니 다.
var text = "this has been a short summer";
var pattern = /(.)hort/g;
if (pattern.test(text)){
alert(RegExp.input);//this has been a short summer
alert(RegExp.$_);
alert(RegExp.leftContext);//this has been a
alert(RegExp["$`"]);
alert(RegExp.rightContext);//summer
alert(RegExp["$' "])
alert(RegExp.lastMatch);//short
alert(RegExp["$&"])
alert(RegExp.lastParen);//s lastParen=
alert(RegExp["$+"])
alert(RegExp.multiline);//false
alert(RegExp["$*"])
캡 처 그룹 을 저장 하 는 구조 함수 속성 은 9 개 에 달한다.RegExp. $1, RegExp. $2..................................................................................
var text = "this has been a short summer";
var pattern = /(..)or(.)/g;
if(pattern.test(text)){
alert(RegExp.$1);//sh
alert(RegExp.$2);//t
}
참고:http://www.cnblogs.com/snandy/p/3662423.html
함수 유형
모든 함 수 는 function 형식의 인 스 턴 스 로 속성 과 방법 을 가지 고 있 습 니 다.함수 가 대상 이기 때문에 함수 명 은 함수 대상 을 가리 키 는 지침 으로 어떤 함수 와 연결 되 지 않 습 니 다.
function sum(num1,num2){
return num1 + num2;
}//
var sum =function(num1,num2){
return num1 + num2;
}// sum ,function , , - sum 。
var sum = new Function("num1","num2","return num1+ num2");
//function , , 。
// , 2 ( ECMAScript , ),
// , 。
함수 선언 과 함수 표현 식
alert(sum(10,10));
function sum(num1,num2){
return num1+num2;
}
이상 함수 가 정상적으로 작 동 합 니 다.코드 가 실행 되 기 전에 해상도 기 는 함수 성명 향상 (function declaration hoisting) 이라는 과정 을 통 해 함수 성명 을 읽 고 실행 환경 에 추가 하기 때 문 입 니 다.코드 값 을 구 할 때 자 바스 크 립 트 엔진 은 처음으로 함 수 를 설명 하고 소스 트 리 의 맨 위 에 놓 습 니 다.그러나 함수 표현 식 으로 바 꾸 면 오류 가 발생 할 수 있 습 니 다.
alert(sum(10,10));
var sum =function (num1,num2){
return num1+num2;
}
값 함수
function callSomeFunction(someFunction,someArgument){
return someFunction(someArgument);
}
function add10(num){
return num+10;
}
var result1 = callSomeFunction(add10,10);
alert(result1);//20
function getGreeting(name){
return "Hello, " +name;
}
var result2 = callSomeFunction(getGreeting,"Nicholas");
alert(result2); //"Hello,Nicholas"
함 수 는 하나의 매개 변수 로 다른 함수 에 전달 할 수도 있 고 함수 의 결과 로 되 돌아 갈 수도 있다.상례 에서 첫 번 째 매개 변 수 는 someFunction 이 하나의 함수 이 고 두 번 째 매개 변 수 는 someArgument 가 이 함수 에 전달 하 는 값 입 니 다.
function createComparisonFunction(propertyName){
return function(object1,object2){
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value1 value2) {
return 1;
} else {
return 0;
}
};
}
var data = [{name:"Zachary",age:28},{name: "Nicholas", age:29}];
data.sort(createComparisonFunction("name"));
alert(data[0].name);//Nicholas
data.sort(createComparisonFunction("age"));
alert(data[0].name);//Zachary;
하나의 대상 배열 은 특정한 속성 에 따라 배열 을 정렬 하지만 어떤 속성 에 따라 정렬 하 는 지 를 가리 키 는 방식 이 필요 합 니 다. 이 를 위해 함 수 를 정의 하고 속성 명 을 받 아들 인 다음 에 이 속성 명 에 따라 비교 함 수 를 만들어 야 합 니 다.
함수 내부 속성
함수 내부 에 2 개의 특수 대상 이 있 습 니 다. arguments 와 this. arguments 는 클래스 배열 대상 입 니 다. 함수 에 들 어 오 는 모든 인 자 를 포함 하고 함수 인 자 를 저장 하 는 데 사 용 됩 니 다. 이 대상 은 callee 속성 이 있 습 니 다. 지침 으로 이 arguments 대상 을 가 진 함 수 를 가리 키 고 있 습 니 다.
결합 이란 두 개 또는 두 개 이상 의 체계 나 두 가지 운동 형식 간 에 상호작용 을 통 해 서로 영향 을 주어 연합 하 는 현상 을 말한다.결합 을 푸 는 것 은 수학 적 방법 으로 두 가지 운동 을 분리 하여 문 제 를 처리 하 는 것 이다. 자주 사용 하 는 결합 방법 은 연구 문제 에 미 치 는 영향 이 비교적 적은 운동 을 무시 하거나 간소화 하여 주요 한 운동 만 분석 하 는 것 이다.
function factorial(num){// , , 。 factorial 。 , arguments.callee.
if (num<=1){
return 1;
} else{
return num * factorial(num-1);
}
}
function factorial(num){
if (num<=1){
return 1;
} else {
return num *arguments.callee(num-1);
}
}// , factorial。
var trueFactorial =factorial;
factorial = function() {
return 0;
};
alert(trueFactorial(5));//120
alert(factorial(5));//0
재 귀 알고리즘 은 사실 말하자면 프로그램의 자체 호출 이다.재 귀 알고리즘 에 나타 난 '중복' 은 보통 세 가지 요구 가 있다. (1) 매번 호출 할 때마다 규모 가 축소 되 는 것 이다 (보통 반 으로 줄어든다).(2) 인접 한 두 번 의 반복 사이 에 밀접 한 관 계 를 가 진 것 으로 앞의 번 은 다음 번 을 위해 준비 해 야 한다 (보통 앞의 출력 은 뒤의 입력 으로 한다).(3) 문제 의 규모 가 매우 큰 시간 에 반드시 직접 해답 을 제시 하고 재 귀적 호출 을 하지 않 아야 하기 때문에 매번 재 귀적 호출 은 조건 이 있다 (규모 가 직접 해답 의 크기 에 이 르 지 못 하 는 것 을 조건 으로). 무조건 재 귀적 호출 은 순환 이 되 어 정상적으로 묶 이지 못 한다.
함수 호출 은 한 가지 형식 만 있 습 니 다: func. call (context, p1, p2)
IMG_8127.JPG
http://stackoverflow.com/questions/7056925/how-does-array-prototype-slice-call-work
다른 함수 대상 의 속성 은 caller 입 니 다. 현재 함 수 를 호출 하 는 함수 의 인용 을 저장 합 니 다.
function outer(){
inner();
}
function inner(){
alert(inner.caller);
}
outer();
outer () 가 inner () 를 호출 했 기 때문에 inner. caller 는 outer () 를 가 리 켰 습 니 다.더 느슨 한 결합 을 실현 하기 위해 서 는 inner. caller 를 arguments. callee. caller 로 바 꿀 수 있 습 니 다.
함수 의 속성 과 방법
함수 가 대상 이기 때문에 속성 과 방법 도 있 습 니 다.2 개 속성: length 는 받 아들 인 이름 매개 변수의 개 수 를 표시 합 니 다.또 하 나 는 this,https://zhuanlan.zhihu.com/p/23804247
각 함수 에는 계승 이 아 닌 방법 2 개가 포함 되 어 있 습 니 다. apply () 와 call (). 이 두 가지 방법의 용 도 는 특정한 역할 영역 에서 함 수 를 호출 하 는 것 입 니 다. 실제 적 으로 함수 내 this 대상 의 수 치 를 설정 하 는 것 과 같 습 니 다.apply () 방법 은 두 개의 인 자 를 받 습 니 다. 하 나 는 함 수 를 실행 하 는 역할 영역 이 고 다른 하 나 는 매개 변수 배열 (매개 변수 배열 일 수도 있 고 Array 의 인 스 턴 스 일 수도 있 습 니 다) 입 니 다.call () 의 차이 점 은 두 번 째 매개 변 수 는 직접적인 매개 변수 이 고 하나씩 열거 하 는 것 이다.(this,num1,num2)
function sum(num1,num2){
return num1 + num2;
}
function callSum1(num1,num2){
return sum.apply(this,arguments);// arguments
}
function callSum2(num1,num2){
return sum.apply(this,[num1,num2]);//
}
alert(callSum1(10,10));//20
alert(callSum2(10,10));//20
진정한 역할 은 역할 영역 을 확장 하 는 것 입 니 다. 보통 함수 뒤에 하나의 역할 영역 대상 을 호출 합 니 다.
window.color = "red";
var o = {color:"blue"};
function sayColor(){
alert(this.color);
}
sayColor();//red
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue
인용 전달 매개 변수 에 따 르 면 이 인용 은 대상 이 메모리 공간 에 있 는 주소 의 인용 을 말 합 니 다. 두 변 수 는 같은 메모리 공간 주 소 를 가리 킬 수 있 습 니 다. 이 인용 을 방법 에 전달 하면 방법 에서 이 인용 중의 데 이 터 를 바 꾸 면 이 인용 변 수 를 가리 키 는 값 이 모두 변 경 됩 니 다.
기본 포장 유형
왜 존재 합 니까? 기본 형식의 값 을 조작 하기 위해 서 는 3 가지 특별한 인용 유형 이 있 습 니 다. Boolean, Number, String. 포장 을 통 해 인용 유형의 방법 과 속성 을 가지 고 있 으 며 기본 유형의 특수 행위 도 있 습 니 다. 기본 유형의 값 을 읽 을 때마다 배경 에 해당 하 는 기본 포장 유형의 대상 을 만 들 고 방법 을 사용 하여 조작 할 수 있 습 니 다.데 이 터 를 만 듭 니 다. 기본 포장 형식의 인 스 턴 스 호출 type of 는 "object" 를 되 돌려 줍 니 다. 불 값 으로 바 뀌 었 을 때 모두 true 입 니 다. Boolean (value)
var s1="some text";
var s2=s1.substring(2);
위의 코드 과정 은 다음 과 같다.
var s1 = new String("some text");// string
var s2 = s1.substring(2);//
s1 = null //
인용 유형 과 기본 포장 유형의 차이
var s1 = "some text";
s1.color = "red";
alert(s1.color);//undefined
자동 으로 생 성 되 는 기본 포장 형식의 대상 은 한 줄 코드 가 실행 되 는 순간 에 만 존재 하 며 즉시 삭 제 됩 니 다. new 연산 자 로 만 든 참조 형식의 인 스 턴 스 는 실행 흐름 이 현재 역할 영역 을 떠 나 기 전에 메모리 에 저 장 됩 니 다.
object 구조 함수 에 문자열 을 전달 하면 string 인 스 턴 스 를 만 들 고 숫자 를 입력 하면 number 인 스 턴 스 를 만 듭 니 다. 불 값 은 불 값 인 스 턴 스 입 니 다.
var obj = new Object("some text");
alert(obj instanceof String);//true
그러나 new 를 사용 하여 기본 포장 유형의 구조 함 수 를 호출 하 는 것 은 동명 의 구조 전환 함 수 를 직접 호출 하 는 것 과 다르다.
var value = "25";
var number =Number (value);//
alert(typeof number);//"number"
var obj = new Number(value);//
alert(typeof obj);//"object"
3. String 형식 var stringObject = new String ("Hello world");
var stringValue ="hello world";
alert(stringValue.charAt(1)); //"e"
alert(stringValue.charCodeAt(1)); //"101", e
var stringValue ="hello world";
alert(stringValue.slice(3));//"lo world"
alert(stringValue.substring(3));//"lo world"
alert(stringValue.substr(3));//"lo world"
alert(stringValue.slice(3,7));//"lo w",7
alert(stringValue.substring(3,7));//"lo w",7
alert(stringValue.substr(3,7));//"lo worl",7
var stringValue = "Lorem ipsum dolor sit amet, consectetur elit";
var positions = new Array();
var pos = stringValue.indexOf("e");// , "e"
while (pos>-1){// , -1
positions.push(pos);// e push
pos = stringValue.indexOf("e",pos +1);// , indexOf() 1,
}
alert(positions); //"3,24,32,35,52"
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.