最初の空白の出現に基づいて文字列を分割する最適化された正規表現を取得しませんでした。
var str="72 tocirah sneab";
私は得る必要があります:
[
"72",
"tocirah sneab",
]
最初の空白の出現に基づいて文字列を分割する最適化された正規表現を取得しませんでした。
var str="72 tocirah sneab";
私は得る必要があります:
[
"72",
"tocirah sneab",
]
回答:
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以降、後読みがサポートされています:
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
str.match(/^(\S+)\s(.*)/).slice(1)
スペースのない文字列に対しては機能しません
ES6では、次のこともできます
let [first, ...second] = str.split(" ")
second = second.join(" ")
ゲームの後半では、私は知っていますが、これを行う非常に簡単な方法があるようです:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
これはarr[0]
、"72"
とarr[1]
一緒に残され"tocirah sneab"
ます。arr [2]は空になりますが、無視してかまいません。
参考のため:
文字列を配列に分割し、必要な部分を接着します。このアプローチは非常に柔軟性があり、多くの状況で機能し、簡単に推論できます。さらに、必要な関数呼び出しは1つだけです。
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つの要素に分割します。最初の要素には最初の単語のみが含まれ、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;
}