【发布时间】:2009-02-21 14:47:18
【问题描述】:
在 IE 和 Firefox 中都可以使用的最简洁的方法是什么?
我的字符串看起来像这样sometext-20202
现在sometext 和破折号后面的整数可以有不同的长度。
我应该只使用substring 和 index of 还是有其他方法?
【问题讨论】:
标签: javascript
在 IE 和 Firefox 中都可以使用的最简洁的方法是什么?
我的字符串看起来像这样sometext-20202
现在sometext 和破折号后面的整数可以有不同的长度。
我应该只使用substring 和 index of 还是有其他方法?
【问题讨论】:
标签: javascript
我会怎么做:
// function you can use:
function getSecondPart(str) {
return str.split('-')[1];
}
// use the function:
alert(getSecondPart("sometext-20202"));
【讨论】:
sometext-20202-303,这个函数就不起作用了,不是特别值得一提吗?
get everything after the dash in a string in javascript,在这种情况下,它会失败。
我更喜欢的解决方案是:
const str = 'sometext-20202';
const slug = str.split('-').pop();
slug 将是您的结果
【讨论】:
var testStr = "sometext-20202"
var splitStr = testStr.substring(testStr.indexOf('-') + 1);
【讨论】:
var the_string = "sometext-20202";
var parts = the_string.split('-', 2);
// After calling split(), 'parts' is an array with two elements:
// parts[0] is 'sometext'
// parts[1] is '20202'
var the_text = parts[0];
var the_num = parts[1];
【讨论】:
AFAIK,substring() 和 indexOf() 均受 Mozilla 和 IE 支持。但是,请注意,某些浏览器的早期版本(尤其是 Netscape/Opera)可能不支持 substr()。
您的帖子表明您已经知道如何使用substring() 和indexOf(),所以我没有发布代码示例。
【讨论】:
使用内置的javascriptreplace()函数和正则表达式(/(.*)-/),您可以用空字符串(“”)替换破折号之前的子字符串:
"sometext-20202".replace(/(.*)-/,""); // result --> "20202"
【讨论】:
myString.split('-').splice(1).join('-')
【讨论】:
myString.split('-').splice(-1).join('-')
我提出这个问题是因为我需要 OP 的要求,但比其他答案提供的更多(它们在技术上是正确的,但对于我的目的来说太少了)。我已经制定了自己的解决方案;也许它会帮助别人。
假设您的字符串是'Version 12.34.56'。如果您使用'.' 进行拆分,则其他答案往往会给您'56',而您真正想要的是'.34.56'(即从第一次 出现而不是最后一次出现的所有内容,但 OP 的具体情况恰好只发生了一次)。也许你甚至可能想要'Version 12'。
我也写了这个来处理某些失败(比如如果null 被传递或一个空字符串等)。在这些情况下,以下函数将返回 false。
splitAtSearch('Version 12.34.56', '.') // Returns ['Version 12', '.34.56']
/**
* Splits string based on first result in search
* @param {string} string - String to split
* @param {string} search - Characters to split at
* @return {array|false} - Strings, split at search
* False on blank string or invalid type
*/
function splitAtSearch( string, search ) {
let isValid = string !== '' // Disallow Empty
&& typeof string === 'string' // Allow strings
|| typeof string === 'number' // Allow numbers
if (!isValid) { return false } // Failed
else { string += '' } // Ensure string type
// Search
let searchIndex = string.indexOf(search)
let isBlank = (''+search) === ''
let isFound = searchIndex !== -1
let noSplit = searchIndex === 0
let parts = []
// Remains whole
if (!isFound || noSplit || isBlank) {
parts[0] = string
}
// Requires splitting
else {
parts[0] = string.substring(0, searchIndex)
parts[1] = string.substring(searchIndex)
}
return parts
}
splitAtSearch('') // false
splitAtSearch(true) // false
splitAtSearch(false) // false
splitAtSearch(null) // false
splitAtSearch(undefined) // false
splitAtSearch(NaN) // ['NaN']
splitAtSearch('foobar', 'ba') // ['foo', 'bar']
splitAtSearch('foobar', '') // ['foobar']
splitAtSearch('foobar', 'z') // ['foobar']
splitAtSearch('foobar', 'foo') // ['foobar'] not ['', 'foobar']
splitAtSearch('blah bleh bluh', 'bl') // ['blah bleh bluh']
splitAtSearch('blah bleh bluh', 'ble') // ['blah ', 'bleh bluh']
splitAtSearch('$10.99', '.') // ['$10', '.99']
splitAtSearch(3.14159, '.') // ['3', '.14159']
【讨论】:
对于那些试图在第一次出现后得到所有东西的人:
类似于"Nic K Cage" 到"K Cage"。
您可以使用slice 获取某个角色的所有信息。在这种情况下,从第一个空格开始:
const delim = " "
const name = "Nic K Cage"
const result = name.split(delim).slice(1).join(delim) // prints: "K Cage"
或者如果 OP 的字符串有两个连字符:
const text = "sometext-20202-03"
// Option 1
const opt1 = text.slice(text.indexOf('-')).slice(1) // prints: 20202-03
// Option 2
const opt2 = text.split('-').slice(1).join("-") // prints: 20202-03
【讨论】:
使用以下形式的正则表达式:\w-\d+ 其中,\w 代表一个单词,\d 代表一个数字。他们不会开箱即用,所以玩一下。试试this。
【讨论】:
您可以使用split 方法。如果您应该从特定模式中获取字符串,您可以使用 split 和 req。 exp.:
var string = "sometext-20202";
console.log(string.split(/-(.*)/)[1])
【讨论】:
其他人都发布了一些完全合理的答案。我采取了不同的方向。不使用 split、substring 或 indexOf。在 i.e. 和 firefox 上效果很好。可能也适用于 Netscape。
只有一个循环和两个 if。
function getAfterDash(str) {
var dashed = false;
var result = "";
for (var i = 0, len = str.length; i < len; i++) {
if (dashed) {
result = result + str[i];
}
if (str[i] === '-') {
dashed = true;
}
}
return result;
};
console.log(getAfterDash("adfjkl-o812347"));
我的解决方案是高效的并且可以处理边缘情况。
上面的代码是为了拖延工作,请不要实际使用。
【讨论】:
使用任何分隔符并获取第一部分或第二部分
//To divide string using deimeter - here @
//str: full string that is to be splitted
//delimeter: like '-'
//part number: 0 - for string befor delimiter , 1 - string after delimiter
getPartString(str, delimter, partNumber) {
return str.split(delimter)[partNumber];
}
【讨论】: