source

Javascript에서 괄호 사이에 문자열을 가져오는 정규 표현식

factcode 2022. 9. 11. 17:08
반응형

Javascript에서 괄호 사이에 문자열을 가져오는 정규 표현식

괄호 사이에 있는 문자열을 반환하는 정규 표현을 쓰려고 합니다.예를 들어 다음과 같습니다.문자열(「」와「」) 사이에 있는 문자열을 취득하고 싶다.

I expect five hundred dollars ($500).

돌아올 것이다

$500

Javascript에서 두 문자열 사이에 문자열을 가져올 정규식을 찾았습니다.

하지만 난 regex는 처음이야.regexp에서 '( , ')'를 사용할 수 없습니다.

이스케이프 세트를 작성해야 합니다.\) 괄호(괄호와 일치) 및 캡처 그룹을 작성하는 일반 괄호 그룹:

var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");

//matches[1] contains the value between the parentheses
console.log(matches[1]);

내역:

  • \(: 첫 번째 괄호와 일치합니다.
  • (: 그룹 캡처 시작
  • [^)]+: 1개 또는 여러 개의 비매치)성격.
  • ): 캡처 그룹 종료
  • \): 닫는 괄호를 일치시킵니다.

RegExplained에 대한 시각적인 설명은 다음과 같습니다.

문자열 조작 시도:

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
    console.log(newTxt[i].split(')')[0]);
}

또는 regex(상기에 비해 다소 느림)

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) {
    var str = matches[i];
    console.log(str.substring(1, str.length - 1));
}

심플한 솔루션

주의: 이 솔루션은 이 질문의 문자열과 같은 단일("" 및 "") 문자열에만 사용할 수 있습니다.

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();

온라인 데모(jsfiddle)

사용할 수 있는 내부 괄호를 제외한 괄호 안의 하위 문자열을 일치시키려면

\(([^()]*)\)

양식.regex 데모를 참조하십시오.

JavaScript에서는 다음과 같이 사용합니다.

var rx = /\(([^()]*)\)/g;

패턴 상세

  • \(- a(
  • ([^()]*)- 캡처 그룹 1: 0 이상의 문자와 일치하는 부정 문자 클래스:(그리고.)
  • \)- a)새카맣게 그을 클릭합니다.

전체 일치를 얻으려면 Group 0 값을 잡습니다. 괄호 안의 텍스트가 필요한 경우 Group 1 값을 잡습니다.

최신 JavaScript 코드 데모(사용)matchAll):

const strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
const rx = /\(([^()]*)\)/g;
strs.forEach(x => {
  const matches = [...x.matchAll(rx)];
  console.log( Array.from(matches, m => m[0]) ); // All full match values
  console.log( Array.from(matches, m => m[1]) ); // All Group 1 values
});

레거시 JavaScript 코드 데모(ES5 준수):

var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;


for (var i=0;i<strs.length;i++) {
  console.log(strs[i]);

  // Grab Group 1 values:
  var res=[], m;
  while(m=rx.exec(strs[i])) {
    res.push(m[1]);
  }
  console.log("Group 1: ", res);

  // Grab whole values
  console.log("Whole matches: ", strs[i].match(rx));
}

일시적인 글로벌 변수 사용을 피하기 위해 Mr_Green의 답변을 기능적 프로그래밍 스타일로 이식했습니다.

var matches = string2.split('[')
  .filter(function(v){ return v.indexOf(']') > -1})
  .map( function(value) { 
    return value.split(']')[0]
  })

다른 방법:

var str = "I expect five hundred dollars ($500) ($1).";
str.match(/\(.*?\)/g).map(x => x.replace(/[()]/g, ""));
→ (2) ["$500", "$1"]

필요한 경우 대괄호를 대괄호 또는 곱슬대괄호로 바꿀 수 있습니다.

통화 기호 뒤에 숫자만 있는 경우:\(.+\s*\d+\s*\)작동해야 한다

또는\(.+\)괄호 안쪽에 있는 어떤 것에 대해서도

let str = "Before brackets (Inside brackets) After brackets".replace(/.*\(|\).*/g, '');
console.log(str) // Inside brackets

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));

$로 시작하는 첫 번째 숫자와 ' )가 일치합니다.''는 경기에 포함되지 않습니다.코드가 첫 번째 일치와 함께 경고합니다.

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)
{
    alert(matches[i]);
}

이 코드는 모든 일치 항목과 함께 경고합니다.

참고 자료:

http://www.w3schools.com/jsref/jsref_obj_regexp.asp에서 "?=n"을 검색합니다.

"x(?=y)"를 검색합니다.https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

플::(?<value>(?<=\().*(?=\)))

제가 도움이 됐기를 바랍니다.

언급URL : https://stackoverflow.com/questions/17779744/regular-expression-to-get-a-string-between-parentheses-in-javascript

반응형