我没有得到优化的正则表达式,可以将我的String拆分为第一个空白出现的地方:
var str="72 tocirah sneab";
我需要得到:
[
"72",
"tocirah sneab",
]
我没有得到优化的正则表达式,可以将我的String拆分为第一个空白出现的地方:
var str="72 tocirah sneab";
我需要得到:
[
"72",
"tocirah sneab",
]
Answers:
Javascript不支持回溯,因此split
是不可能的。match
作品:
str.match(/^(\S+)\s(.*)/).slice(1)
另一个技巧:
str.replace(/\s+/, '\x01').split('\x01')
怎么样:
[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]
那么为何不
reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)
或许
re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))
2019更新:从ES2018开始,支持lookbehinds:
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
str.match(/^(\S+)\s(.*)/).slice(1)
不会为没有空格的字符串工作
我知道游戏晚了,但是似乎有一种非常简单的方法可以做到这一点:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
将arr[0]
与"72"
和arr[1]
一起离开"tocirah sneab"
。请注意,arr [2]将为空,但您可以忽略它。
以供参考:
只需将字符串拆分成一个数组,然后将所需的部分粘合在一起即可。这种方法非常灵活,可以在许多情况下使用,并且很容易推理。另外,您只需要一个函数调用。
arr = str.split(' '); // ["72", "tocirah", "sneab"]
strA = arr[0]; // "72"
strB = arr[1] + ' ' + arr[2]; // "tocirah sneab"
另外,如果您想直接从字符串中挑选所需的内容,则可以执行以下操作:
strA = str.split(' ')[0]; // "72";
strB = str.slice(strA.length + 1); // "tocirah sneab"
或像这样:
strA = str.split(' ')[0]; // "72";
strB = str.split(' ').splice(1).join(' '); // "tocirah sneab"
但是我建议第一个例子。
工作演示:jsbin
每当我需要从类列表或类名称或ID的一部分中获取类时,我总是使用split(),然后使用数组索引专门获取它,或者在我的情况下,通常是pop()来获取它最后一个元素或shift()以获得第一个。
本示例获取div的类“ gallery_148 ui-sortable”,并返回画廊ID 148。
var galleryClass = $(this).parent().prop("class"); // = gallery_148 ui-sortable
var galleryID = galleryClass.split(" ").shift(); // = gallery_148
galleryID = galleryID.split("_").pop(); // = 148
//or
galleryID = galleryID.substring(8); // = 148 also, but less versatile
我确定可以将其压缩为更少的行,但是为了可读性我将其扩展了。
我需要一个略有不同的结果。
我想要第一个单词,以及之后的内容-即使它是空白。
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
因此,如果输入的是oneword
你得到oneword
和''
。
如果输入是one word and some more
,则得到one
和word and some more
。
以下功能将始终将句子分为2个元素。第一个元素将仅包含第一个单词,第二个元素将包含所有其他单词(或者它将是一个空字符串)。
var arr1 = split_on_first_word("72 tocirah sneab"); // Result: ["72", "tocirah sneab"]
var arr2 = split_on_first_word(" 72 tocirah sneab "); // Result: ["72", "tocirah sneab"]
var arr3 = split_on_first_word("72"); // Result: ["72", ""]
var arr4 = split_on_first_word(""); // Result: ["", ""]
function split_on_first_word(str)
{
str = str.trim(); // Clean string by removing beginning and ending spaces.
var arr = [];
var pos = str.indexOf(' '); // Find position of first space
if ( pos === -1 ) {
// No space found
arr.push(str); // First word (or empty)
arr.push(''); // Empty (no next words)
} else {
// Split on first space
arr.push(str.substr(0,pos)); // First word
arr.push(str.substr(pos+1).trim()); // Next words
}
return arr;
}