[javascript] 지정된 문자의 첫 번째 인스턴스에서만 문자열 분리

내 코드에서는 _배열을 기반으로 문자열을 분할 하고 두 번째 항목을 가져옵니다.

var element = $(this).attr('class');
var field = element.split('_')[1];

소요 good_luck와 저를 제공합니다 luck. 잘 작동합니다!

그러나 이제는 다음과 같은 클래스가 good_luck_buddy있습니다. Javascript에서 두 번째를 무시하고 _나에게 luck_buddy어떻게 주어야 합니까?

var field = element.split(new char [] {'_'}, 2);ac # stackoverflow 답변 에서 이것을 찾았 지만 작동하지 않습니다. jsFiddle에서 다시 시도했습니다 …



답변

캡처 괄호를 사용하십시오 .

"good_luck_buddy".split(/_(.+)/)[1]
"luck_buddy"

그들은 다음과 같이 정의됩니다

separator캡처 괄호가 포함 된 경우 일치하는 결과가 배열에 반환됩니다.

따라서이 경우에는 우리는에 분할 할 _.+(즉, 분할 구분 하위 문자열로 시작되는 _) 뿐만 아니라 결과가 우리 분리기의 일부 (예를 포함 할 수 있도록 모든 후를 _).

이 예에서 구분 기호 (일치 _(.+))는 _luck_buddy캡처 된 그룹 (구분 기호 내)입니다 lucky_buddy. 캡처 괄호가 없으면 luck_buddy(matching .+)은 결과 split에 구분 기호가 포함되지 않은 간단한 결과 배열이므로 결과 배열에 포함되지 않습니다.


답변

정규 표현식과 배열에는 무엇이 필요합니까?

myString = myString.substring(myString.indexOf('_')+1)
var myString= "hello_there_how_are_you"
myString = myString.substring(myString.indexOf('_')+1)
console.log(myString)


답변

모든 비용으로 RegExp를 피합니다. 할 수있는 또 다른 일이 있습니다.

"good_luck_buddy".split('_').slice(1).join('_')

답변

첫 번째 인스턴스를 고유 한 자리 표시 자로 바꾸고 거기서 분리하십시오.

"good_luck_buddy".replace(/\_/,'&').split('&')

["good","luck_buddy"]

분할의 양쪽이 필요할 때 더 유용합니다.


답변

정규식을 다음과 같이 사용할 수 있습니다.

var arr = element.split(/_(.*)/)


분할 한계를 지정하는 두 번째 매개 변수를 사용할 수 있습니다. 즉 : var field = element.split ( ‘_’, 1) [1];


답변

요즘 String.prototype.split에는 실제로 분할 수를 제한 할 수 있습니다.

str.split([separator[, limit]])

제한 옵션

스플릿 수를 제한하는 음이 아닌 정수입니다. 제공된 경우 지정된 구분 기호가 나타날 때마다 문자열을 분할하지만 한계 항목이 배열에 배치되면 중지됩니다. 남은 텍스트는 배열에 전혀 포함되지 않습니다.

한계에 도달하기 전에 문자열의 끝에 도달하면 배열에 한계보다 적은 항목이 포함될 수 있습니다. 한계가 0이면 분할이 수행되지 않습니다.

경고

예상대로 작동하지 않을 수 있습니다. 나는 나머지 구분 기호를 무시하기를 바랐지만 대신 한계에 도달하면 나머지 문자열을 다시 분할하여 반환 결과에서 분할 후 부분을 생략합니다.

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C"]

나는 바라고 있었다 :

let str = 'A_B_C_D_E'
const limit_2 = str.split('_', 2)
limit_2
(2) ["A", "B_C_D_E"]
const limit_3 = str.split('_', 3)
limit_3
(3) ["A", "B", "C_D_E"]

답변

이 솔루션은 저에게 효과적이었습니다.

var str = "good_luck_buddy";
var index = str.indexOf('_');
var arr = [str.slice(0, index), str.slice(index + 1)];

//arr[0] = "good"
//arr[1] = "luck_buddy"

또는

var str = "good_luck_buddy";
var index = str.indexOf('_');
var [first, second] = [str.slice(0, index), str.slice(index + 1)];

//first = "good"
//second = "luck_buddy"