정규식과 슬래시 일치


90

나는 JavaScript에 대한 경험이 많지 않지만 @또는 을 사용하는 대신을 사용하는 태그 시스템을 만들려고 #합니다 /.

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

어떻게 사용할 수있는 /대신의 #. 나는 var slash = '/'하고 추가 하려고 시도 + slash +했지만 실패했습니다.


1
제목을 변경하십시오. 그리고 당신은 정말로 무엇을하려고합니까? 귀하의 질문을 읽은 후에도 여전히 잘 모르겠습니다.
OptimusCrime

이해가 잘 안됩니다.
John Strickler 2013 년

답변:


123

이렇게 탈출 할 수 있습니다.

/\//ig; //  Matches /

또는 그냥 indexOf 사용

if(str.indexOf("/") > -1)

감사합니다 벤, 저도 시도했지만 끝에 \를 추가했습니다.
iBrazilian2 2013 년



6

정규식에서 "/"는 이스케이프해야하는 특수 문자입니다 (일명 앞에 \를 배치하여 제공 할 수있는 특수 함수를 무효화하여 플래그가 지정됨).

필요한 것은 다음과 같습니다.

var word = /\/(\w+)/ig; //   /abc Match

여기에서 RegEx 특수 문자에 대해 읽어보십시오 : http://www.regular-expressions.info/characters.html


17
"/"는 정규식에서 특수 문자가 아닙니다. 그러나 정규 표현식이 시작되고 끝나는 위치를 구분하는 것은 JavaScript의 특수 문자입니다.
sokkyoku

5

다음과 같이 슬래시를 문자 그룹으로 묶어 특수 JS 처리 슬래시를 해결할 수도 있습니다.

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]

2
가독성을위한 정규식 한 문자 이상 만들 않습니다 탈출 방지하기 위해 문자 집합을 사용 하나, 그러나 그것의 가치는 : /[/]/시각적으로 더 명확보다 후행 구분 기호를 구별합니다 /\//.
Dem Pilafian

2
/[/]/읽기 쉽고 작동하지만 일부 RegEx 유효성 검사기는 문자 그룹 내에서도 "이스케이프 처리되지 않은 구분 기호는 백 슬래시로 이스케이프해야합니다"라고 보고 합니다 . 그래서 저는 추악한 형태 로 다시 전환했습니다 . /\//
Dem Pilafian 19


1

나를 위해 /C #의 날짜 와 일치하려고했습니다 . 나는 다음을 사용하여 그것을했다 (\/).

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

자바 스크립트도 (\/).


Downvoter, 설명 하시겠습니까? 이것은 효과가 있으며 테스트를 통해 증명했습니다.
vapcguy

1
사고라고 생각합니다. 죄송합니다. 실행 취소를 시도했지만 답변을 수정하지 않으면 투표가 잠겼습니다. 내가 보는 유일한 것은 사용하지 않는 것으로 보이는 그룹 캡처 로그가 있다는 것입니다. 모든 것이 괄호 안에있는 이유는 무엇입니까?
Ryan Quinn

1
@RyanQuinn 설명해 주셔서 감사합니다. 나는 괄호를 사용하여 내가 기대했던 특정 숫자를 나타 내기 위해 함께 그룹화했습니다. 또한 그것을 테스트하기 위해 사용했던 사이트에서 요구하는 것처럼 보였습니다. regexr.com 내 게시물을 편집했습니다 (마지막에 공백을 추가했습니다). 원하는 경우 반대표 를 제거 할 수 있습니다.
vapcguy

0

\및로 구분 된 텍스트를 추출 할 때 앞서 말한 것과 관련된 두 가지 문제가 발생 했으며 처음에 필요한를 /사용 new RegExp하는 것 외에 둘 다에 맞는 솔루션을 찾았습니다 \\\\. 이러한 결과는 Chrome 및 IE11에 있습니다.

정규식

/\\(.*)\//g

작동하지 않습니다. //이스케이프 문자에도 불구하고 주석의 시작으로 해석되는 것 같습니다 . 정규식 (일반적이지는 않지만 내 경우에도 똑같이 유효 함)

/\b/\\(.*)\/\b/g

또한 작동하지 않습니다. 두 번째 /는 이스케이프 문자에도 불구하고 정규식을 종료 한다고 생각합니다 .

무엇 나를 위해 작업을 수행하는 것은 표현하는 /\x2F의 16 진수 표현이다, /. 를 사용하는 것보다 더 효율적이고 이해하기 쉽다고 생각 new RegExp하지만, 물론 16 진수 코드를 식별하려면 주석이 필요합니다.


0

슬래시는 특수 문자이므로 슬래시 앞에 백 슬래시를 추가해야 작동합니다.

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

여기서 /는 검색을 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.