2017-10-06 8 views
0

다음 코드 examines the content of inputData.body for a 32-character string match 및 - 가장 이해하기 쉽도록 배열에 일치 항목을 배치합니다.자바 정규식이 일치하지 않는 경우 "false"를 반환합니다.

// stores an array of any length (0 or more) with the matches 
var matches = inputData.body.match(/\b[\w-]{32}\b/g) 

// the .map function executes the nameless inner function once for each element of the array and returns a new array with the results 
return matches.map(function (m) { return {str: m} }) 

는 지금은 예를 들어 어떤 일치 표현의 경우, 뭔가를 반환하는 코드가 필요합니다. 문자열 "false".

나는

// stores an array of any length (0 or more) with the matches 
var matches = inputData.body.match(/\b[\w-]{32}\b/g) 

if (matches == null){ 
    return 'false' 
} 

// the .map function executes the nameless inner function once for each element of the array and returns a new array with the results 
return matches.map(function (m) { return {str: m} }) 

어떻게 조건부 공허함의 경우에 뭔가를 돌아 가야한다 ...이 또한 작동시킬 수 없었다?

+0

코드가 랩핑되어 있습니까? –

+2

나는 당신의 코드가 효과가 있다고 생각한다. – Barmar

+0

호출자가 함수의 결과로 문자열을 얻을 준비가 되었습니까? 아마 배열을 기대합니다. – Barmar

답변

0

호출자는 객체의 배열 또는 단일 객체 (아마도 하나의 객체의 배열처럼 취급 됨)를 기대합니다. 그래서 하나의 객체를 반환하십시오.

if (matches == null) { 
    return { str: "false"; } 
} 
return matches.map(function (m) { return {str: m} }); 

또는 단일 문에서

:

return matches == null ? { str: "false"; } : matches.map(function (m) { return {str: m} }); 
+0

위의 모든 것을 지적합니다. 비어있는 것을 채우기보다는 약간의 긍정적 인 결과물이 필요하다. 위의'false '로'str'을 채우는 것은 그렇게하는 것처럼 보이며, 다음 단계에서'false'라는 단어를 테스트 할 수있는 능력을 제공한다. 예쁘지는 않지만 필요한 것은 무엇인지. 조건 설정을해야한다고 생각합니다. ... 'if (matches == null) { return {str : 'false'}; } else { matches.map (function (m) {return {str : m}}) }'? –

+0

'if'가'return'을 수행하면'else'가 필요 없습니다. – Barmar

+1

설명서를 살펴본 결과 빈 배열이 괜찮다고 보입니다. ** 자 피어에 의한 코드가 Zap의 트리거이고 빈 배열이 반환 된 경우 아무 것도 발생하지 않습니다 ** ** – Barmar

0

호출자는 아마도 더 일치가 없다면 빈 하나 여야합니다 배열을 기대하고있다. 정규식 당신이 참/거짓 반환 test() 방법을 사용해야합니다 특정 패턴과 일치하는 경우

return (matches || []).map(function (m) { return {str: m} })