12345.00
문자열이 있고 12345.0
을 반환하고 싶습니다.
나는 trim
을 보았지만 이것이 어떻게 작동하는지 알지 못하는 slice
만 트리밍하는 것처럼 보입니다. 어떤 제안?
질문자 :Phill Pafford
12345.00
문자열이 있고 12345.0
을 반환하고 싶습니다.
나는 trim
을 보았지만 이것이 어떻게 작동하는지 알지 못하는 slice
만 트리밍하는 것처럼 보입니다. 어떤 제안?
부분 문자열 함수를 사용할 수 있습니다.
let str = "12345.00"; str = str.substring(0, str.length - 1); console.log(str);
이것은 허용되는 답변이지만 아래 대화에 따르면 슬라이스 구문이 훨씬 더 명확합니다.
let str = "12345.00"; str = str.slice(0, -1); console.log(str);
슬라이스 를 사용할 수 있습니다! 사용법만 잘 알고 있으면 됩니다. 양수 #는 시작을 기준으로 하고 음수는 끝을 기준으로 합니다.
js>"12345.00".slice(0,-1) 12345.0
JavaScript 문자열 개체 의 하위 문자열 메서드를 사용할 수 있습니다.
s = s.substring(0, s.length - 4)
s
에서 마지막 4개 문자를 무조건 제거합니다.
그러나 조건부로 마지막 네 문자를 제거하려면 정확히 _bar
경우에만 다음을 수행합니다.
var re = /_bar$/; s.replace(re, "");
가장 쉬운 방법은 음수 위치(문자열 끝에서 오프셋에 해당)를 허용하는 문자열 slice
const s = "your string"; const withoutLastFourChars = s.slice(0, -4);
마지막 밑줄 이후(및 포함) 모든 항목을 제거하기 위해 보다 일반적인 것이 필요한 경우 다음을 수행할 수 있습니다( s
에 밑줄이 하나 이상 포함되어 있는 한):
const s = "your_string"; const withoutLastChunk = s.slice(0, s.lastIndexOf("_")); console.log(withoutLastChunk);
귀하의 예와 같은 숫자의 경우 substring
통해 이 작업을 수행하는 것이 좋습니다.
console.log(parseFloat('12345.00').toFixed(1));
이것은 실제로 숫자를 반올림한다는 점에 유의하십시오. 이 숫자는 바람직하지만 아닐 수도 있습니다.
console.log(parseFloat('12345.46').toFixed(1));
JavaScript의 슬라이스 기능 사용:
let string = 'foo_bar'; string = string.slice(0, -4); // Slice off last four characters here console.log(string);
이것은 어떤 길이의 문자열 끝에서 '_bar'를 제거하는 데 사용할 수 있습니다.
정규 표현식은 당신이 찾고 있는 것입니다:
let str = "foo_bar"; console.log(str.replace(/_bar$/, ""));
String.prototype.{ split, slice, substr, substring }
은 UTF-16으로 인코딩된 문자열에서 작동합니다. 이전 답변 중 어느 것도 유니코드를 인식하지 않습니다. 문자열은 대부분의 최신 JavaScript 엔진에서 UTF-16으로 인코딩되지만 더 높은 유니코드 코드 포인트에는 대리 쌍이 필요하므로 이전의 기존 문자열 메서드는 유니코드 코드 포인트가 아닌 UTF-16 코드 단위에서 작동합니다. 참조: .split('')
사용하지 마십시오 .
const string = "ẞ"; console.log(string.slice(0, -1)); // "ẞ\ud83e" console.log(string.substr(0, string.length - 1)); // "ẞ\ud83e" console.log(string.substring(0, string.length - 1)); // "ẞ\ud83e" console.log(string.replace(/.$/, "")); // "ẞ\ud83e" console.log(string.match(/(.*).$/)[1]); // "ẞ\ud83e" const utf16Chars = string.split(""); utf16Chars.pop(); console.log(utf16Chars.join("")); // "ẞ\ud83e"
또한 RegExp
메서드는 끝에 줄 바꿈과 일치하지 않습니다.
const string = "Hello, world!\n"; console.log(string.replace(/.$/, "").endsWith("\n")); // true console.log(string.match(/(.*).$/) === null); // true
유니코드 인식 코드는 문자열의 반복자를 활용합니다. Array.from
및 ...
spread를 참조하십시오. string[Symbol.iterator]
사용할 수 있습니다(예: string
대신).
또한 JavaScript에서 유니코드 문자열을 문자로 분할하는 방법을 참조하십시오.
예:
const string = "ẞ"; console.log(Array.from(string).slice(0, -1).join("")); // "ẞ" console.log([ ...string ].slice(0, -1).join("")); // "ẞ"
RegExp
에서 s
및 u
플래그 사용 dotAll
또는 s
플래그 는 를 만듭니다 .
줄 바꿈 문자, unicode
또는 u
플래그 는 특정 유니코드 관련 기능을 활성화합니다. u
플래그를 사용할 때 불필요한 ID 이스케이프를 제거합니다 u
정규식에서 유효하지 않기 때문입니다. 예를 들어 \[
는 백슬래시 없이 문자 클래스를 시작하므로 괜찮지만 \:
는 그렇지 않습니다. a :
백슬래시 유무에 관계없이 백슬래시를 제거해야 합니다.
예:
const unicodeString = "ẞ", lineBreakString = "Hello, world!\n"; console.log(lineBreakString.replace(/.$/s, "").endsWith("\n")); // false console.log(lineBreakString.match(/(.*).$/s) === null); // false console.log(unicodeString.replace(/.$/su, "")); // ẞ console.log(unicodeString.match(/(.*).$/su)[1]); // ẞ // Now `split` can be made Unicode-aware: const unicodeCharacterArray = unicodeString.split(/(?:)/su), lineBreakCharacterArray = lineBreakString.split(/(?:)/su); unicodeCharacterArray.pop(); lineBreakCharacterArray.pop(); console.log(unicodeCharacterArray.join("")); // "ẞ" console.log(lineBreakCharacterArray.join("").endsWith("\n")); // false
일부 자소는 둘 이상의 코드 포인트로 구성됩니다. 예: 시퀀스로 구성된
(U+1F3F3),
VS16
(U+FE0F) , ZWJ
(U+200D) , (U+1F308). 여기에서는
Array.from
도 이것을 4개의 "문자"로 분할합니다. 그것들을 일치시키는 것은 RegExp set 표기법과 문자열 제안의 속성을 사용하면 더 쉬워집니다.
이 시도:
const myString = "Hello World!"; console.log(myString.slice(0, -1));
정규식 사용:
let aStr = "12345.00"; aStr = aStr.replace(/.$/, ''); console.log(aStr);
어때요:
let myString = "12345.00"; console.log(myString.substring(0, myString.length - 1));
console.log("a string".match(/(.*).$/)[1]);
console.log("a string".match(/(.*).$/));
console.log("a string".match(/(.*).{2}$/)[1]);
오늘 2020.05.13 저는 MacOs High Sierra v10.13.6의 Chrome v81.0, Safari v13.1 및 Firefox v76.0에서 선택한 솔루션의 테스트를 수행합니다.
slice(0,-1)
(D)는 짧고 긴 문자열에 대한 빠르거나 빠른 솔루션이며 빠른 브라우저 간 솔루션으로 권장됩니다.substring
(C) 및 substr
(E)는 빠르다솔루션 A , B , C , D , E( ext ), F , G(my) 에 대해 두 가지 테스트를 수행합니다.
솔루션은 아래 스니펫에 나와 있습니다.
function A(str) { return str.replace(/.$/, ''); } function B(str) { return str.match(/(.*).$/)[1]; } function C(str) { return str.substring(0, str.length - 1); } function D(str) { return str.slice(0, -1); } function E(str) { return str.substr(0, str.length - 1); } function F(str) { let s= str.split(""); s.pop(); return s.join(""); } function G(str) { let s=''; for(let i=0; i<str.length-1; i++) s+=str[i]; return s; } // --------- // TEST // --------- let log = (f)=>console.log(`${f.name}: ${f("12345.00")}`); [A,B,C,D,E,F,G].map(f=>log(f));
This snippet only presents soutions
다음은 짧은 문자열에 대한 Chrome 결과의 예입니다.
다음은 재미를 위해 다른 답변에서 본 적이 없다고 생각하는 대안입니다.
var strArr = "hello i'm a string".split(""); strArr.pop(); document.write(strArr.join(""));
조각이나 부분 문자열만큼 가독성이 떨어지거나 단순하지는 않지만 몇 가지 멋진 배열 방법을 사용하여 문자열을 가지고 놀 수 있으므로 알 가치가 있습니다.
debris = string.split("_") //explode string into array of strings indexed by "_" debris.pop(); //pop last element off the array (which you didn't want) result = debris.join("_"); //fuse the remainng items together like the sun
마지막 문자를 트리밍하는 대신 부동 소수점의 일반적인 반올림을 수행하려면 다음을 수행하십시오.
var float1 = 12345.00, float2 = 12345.4567, float3 = 12345.982; var MoreMath = { /** * Rounds a value to the specified number of decimals * @param float value The value to be rounded * @param int nrDecimals The number of decimals to round value to * @return float value rounded to nrDecimals decimals */ round: function (value, nrDecimals) { var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1; return Math.round(value * x) / x; } } MoreMath.round(float1, 1) => 12345.0 MoreMath.round(float2, 1) => 12345.5 MoreMath.round(float3, 1) => 12346.0
편집: Paolo가 지적했듯이 이에 대한 내장 기능이 있는 것 같습니다. 그 솔루션은 분명히 나보다 훨씬 깨끗합니다. parseFloat 다음에 toFixed를 사용하십시오.
if(str.substring(str.length - 4) == "_bar") { str = str.substring(0, str.length - 4); }
공백을 원하지 않으면 trim을 사용하십시오.
"11.01 °C".slice(0,-2).trim()
arr.length - 2
arr.length = 2
사용하여 배열의 2개 항목을 제거할 수 있습니다. 배열 길이가 5이면 마지막 3개 항목이 제거됩니다.
슬프게도 이것은 문자열에서는 작동하지 않지만 split()
을 사용하여 문자열을 분할한 다음 join()
을 사용하여 수정한 후 문자열을 결합할 수 있습니다.
var str = 'string' String.prototype.removeLast = function(n) { var string = this.split('') string.length = string.length - n return string.join('') } console.log(str.removeLast(3))
slice(indexStart, indexEnd) 메서드를 통해 - 기존 문자열을 변경하지 않고 복사본을 만들고 복사본을 변경합니다.
console.clear(); let str = "12345.00"; let a = str.slice(0, str.length -1) console.log(a, "<= a"); console.log(str, "<= str is NOT changed");
정규식 방법을 통해 - 기존 문자열을 변경하지 않으며 복사본을 만들고 복사본을 변경합니다.
console.clear(); let regExp = /.$/g let b = str.replace(regExp,"") console.log(b, "<= b"); console.log(str, "<= str is NOT changed");
array.splice() 메서드를 통해 -> 이것은 배열에서만 작동하며 기존 배열(이 배열에 주의)을 변경하므로 먼저 문자열을 배열로 변환한 다음 다시 변환해야 합니다.
console.clear(); let str = "12345.00"; let strToArray = str.split("") console.log(strToArray, "<= strToArray"); let spliceMethod = strToArray.splice(str.length-1, 1) str = strToArray.join("") console.log(str, "<= str is changed now");
문자열 끝에 가까운 것을 제거하려는 경우(가변 크기 문자열의 경우) slice()와 substr()을 결합할 수 있습니다.
쉼표로 구분된 앵커 태그 목록과 함께 동적으로 작성된 마크업이 있는 문자열이 있습니다. 문자열은 다음과 같았습니다.
var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";
마지막 쉼표를 제거하려면 다음을 수행했습니다.
str = str.slice(0, -5) + str.substr(-4);
이 시도:
<script> var x="foo_foo_foo_bar"; for (var i=0; i<=x.length; i++) { if (x[i]=="_" && x[i+1]=="b") { break; } else { document.write(x[i]); } } </script>
http://jsfiddle.net/informativejavascript/F7WTn/87/ 에서 실제 작업 예제를 시도할 수도 있습니다.
@제이슨 S:
슬라이스를 사용할 수 있습니다! 사용법만 잘 알고 있으면 됩니다. 양수 #는 시작을 기준으로 하고 음수는 끝을 기준으로 합니다.
js>"12345.00".slice(0,-1) 12345.0
내 graphomany에 대해 죄송하지만 게시물은 이전에 'jquery' 태그가 지정되었습니다. 슬라이스 () @ 존 에릭슨은 정말 완벽한 솔루션을 제안 대답 즉 DOM 요소가 아닌 문자열 ...와 작업의 jQuery 방법이기 때문에 그래서, 당신은 jQuery를 내부 슬라이스 ()를 사용할 수 없습니다.
그러나 귀하의 방법은 간단한 Javascript 내부의 jQuery 기능에서 작동합니다. 의견에 대한 마지막 토론으로 인해 jQuery는 가장 잘 알려진 ECMAScript의 부모보다 훨씬 더 자주 JS의 재생 가능한 확장이라고 말할 필요가 있습니다.
여기에도 두 가지 방법이 있습니다.
우리처럼:
string.substring(from,to)
as plus if 'to' 인덱스가 null이면 나머지 문자열을 반환합니다. 그래서: string.substring(from)
양수 또는 음수 ...
및 일부 다른 - substr() - 부분 문자열의 범위를 제공하고 '길이'는 양수일 수 있습니다. string.substr(start,length)
또한 일부 유지 관리자는 마지막 메서드 string.substr(start,length)
이 작동하지 않거나 MSIE 오류와 함께 작동하지 않는다고 제안합니다.
하위 문자열을 사용하여 _bar의 왼쪽에 있는 모든 항목을 가져옵니다. 그러나 먼저 문자열에서 _bar의 instr을 가져와야 합니다.
str.substring(3, 7);
3은 시작이고 7은 길이입니다.
출처 : http:www.stackoverflow.com/questions/952924/javascript-chop-slice-trim-off-last-character-in-string
'using' 지시문은 네임스페이스 내부 또는 외부에 있어야 합니까? (0) | 2021.11.29 |
---|---|
Spring에서 @Component, @Repository & @Service 주석의 차이점은 무엇입니까? (2) | 2021.11.29 |
Java에서 배열을 어떻게 선언하고 초기화합니까? (0) | 2021.11.29 |
Bash의 구분 기호에서 문자열을 어떻게 분할합니까? (0) | 2021.11.29 |
npm package.json 파일의 종속성, devDependencies 및 peerDependencies의 차이점은 무엇입니까? (0) | 2021.11.26 |