我有一些隨機字符串,例如:Hello, my name is john.
。我想把這個字符串拆分成這樣的數組:Hello, ,, , my, name, is, john, .,
。我試過str.split(/[^\w\s]|_/g)
,但它似乎沒有工作。有任何想法嗎?如何用空格和標點符號分割JavaScript字符串?
回答
試試這個(我不知道這是否是你想要的):
str.replace(/[^\w\s]|_/g, function ($1) { return ' ' + $1 + ' ';}).replace(/[ ]+/g, ' ').split(' ');
這正是我想要的!謝謝 – chromedude 2011-05-28 16:04:54
@chromedude最後一部分可以縮短爲這種形式:'str.replace(/ [^ \ w \ s] | _/g,function($ 1){return''+ $ 1 +'';} ).split(/ [] +/g);'。我只是不習慣在正則表達式中使用split方法。 – pepkin88 2011-05-28 16:11:40
嘗試:
str.split(/([_\W])/)
這將通過任何非字母數字字符(\W
)和任何下劃線分裂。它使用捕獲括號來包含在最終結果中拆分的項目。
由於\ W表示任何不是A-Z,0-9或下劃線的字符,您可以將/ [\ W \ s _] /簡化爲\ \ W /以獲得相同的效果。要將不可接受字符的下劃線添加到列表中,請將其添加到字符類的開頭以提高效率。 – 2011-05-28 15:41:00
@Rob:在'\ s'位擊敗你。儘管如此,我會先編輯它以使下劃線成爲下劃線。謝謝。 – Reid 2011-05-28 15:43:55
由於不需要捕獲任何東西,因此它們是多餘的,因爲它們的添加會增加執行時間,所以應該將其刪除。此外,字符類需要附加一個加號(以匹配一個或多個),除非您想要空的結果。因此,完整的表達式應該是「str.split(/ [\ _ \ W] + /)」(爲了便於閱讀,我將反斜槓轉義添加到下劃線,即使不需要)。 – 2011-05-28 17:12:41
要在非單詞字符,即任何運行分割海峽不是A-Z,0-9和下劃線。
var words=str.split(/\W+/); // assumes str does not begin nor end with whitespace
或者,假設你的目標語言是英語,你可以使用一個字符串(即「符號化」的字符串)提取所有語義有用的值:
var str='Here\'s a (good, bad, indifferent, ...) '+
'example sentence to be used in this test '+
'of English language "token-extraction".',
punct='\\['+ '\\!'+ '\\"'+ '\\#'+ '\\$'+ // since javascript does not
'\\%'+ '\\&'+ '\\\''+ '\\('+ '\\)'+ // support POSIX character
'\\*'+ '\\+'+ '\\,'+ '\\\\'+ '\\-'+ // classes, we'll need our
'\\.'+ '\\/'+ '\\:'+ '\\;'+ '\\<'+ // own version of [:punct:]
'\\='+ '\\>'+ '\\?'+ '\\@'+ '\\['+
'\\]'+ '\\^'+ '\\_'+ '\\`'+ '\\{'+
'\\|'+ '\\}'+ '\\~'+ '\\]',
re=new RegExp( // tokenizer
'\\s*'+ // discard possible leading whitespace
'('+ // start capture group
'\\.{3}'+ // ellipsis (must appear before punct)
'|'+ // alternator
'\\w+\\-\\w+'+ // hyphenated words (must appear before punct)
'|'+ // alternator
'\\w+\'(?:\\w+)?'+ // compound words (must appear before punct)
'|'+ // alternator
'\\w+'+. // other words
'|'+ // alternator
'['+punct+']'+ // punct
')' // end capture group
);
// grep(ary[,filt]) - filters an array
// note: could use jQuery.grep() instead
// @param {Array} ary array of members to filter
// @param {Function} filt function to test truthiness of member,
// if omitted, "function(member){ if(member) return member; }" is assumed
// @returns {Array} all members of ary where result of filter is truthy
function grep(ary,filt) {
var result=[];
for(var i=0,len=ary.length;i++<len;) {
var member=ary[i]||'';
if(filt && (typeof filt === 'Function') ? filt(member) : member) {
result.push(member);
}
}
return result;
}
var tokens=grep(str.split(re)); // note: filter function omitted
// since all we need to test
// for is truthiness
主要生產:
tokens=[
'Here\'s',
'a',
'(',
'good',
',',
'bad',
',',
'indifferent',
',',
'...',
')',
'example',
'sentence',
'to',
'be',
'used',
'in',
'this',
'test',
'of',
'English',
'language',
'"',
'token-extraction',
'"',
'.'
]
編輯
而且阿瓦伊標籤爲Github Gist
'split(/ \ W + /)'刪除所有非英文字符。不要用它來分割名稱。 – 2014-07-11 12:26:39
這個解決方案給我帶來了空間挑戰(仍然需要它們),然後我給了str.split(/\b/)
一槍,一切都很好。數組中輸出的空格不會被忽略,標點後留下的空格可以被刪除。
- 1. C++分割字符串,空格和標點符號
- 2. 的Javascript分割字符串用空格
- 3. 的Java由空格和標點符號分割字符串,但只包括結果標點符號
- 4. 分割字母,數字的字符串,和標點符號
- 5. 問題分割字符串,包括括號,分號和空格
- 6. 包括標點符號在標點符號後分割字符串
- 7. 用任何符號分割字符串
- 8. 將字符串分割成句子了常用標點符號
- 9. 使用split()分割字符串中的各種標點符號
- 10. 用空格分割字符串
- 11. 分割字符串用空格在C#
- 12. 分割字符串用一個空格
- 13. 分割字符串用空格
- 14. 分割字符串用空格
- 15. Solr dismax行爲 - 標點符號和空格分割
- 16. 分割字符串轉換成詞,標點符號和空格的排列在JavaScript
- 17. 分割字符串用加號(+)字符
- 18. 用JavaScript分割字符串
- 19. 在逗號和空格上同時分割一個字符串
- 20. 如何通過空格或點分割字符串?
- 21. 如何用點分割字符串?
- 22. 用空格分割字符串導致字符串損壞
- 23. PHP - 分割字符串用空格和引號不帶空格到數組
- 24. 從字符串中刪除標點符號和空格
- 25. C++從字符串中刪除標點符號和空格
- 26. 計數用空格和/或標點符號分隔字符串的單詞數
- 27. 如何使用\符號分割字符或字符串?
- 28. 如何使用JavaScript分割逗號分隔的字符串?
- 29. 分割字符串,或保持標點符號
- 30. Ruby中未知標點符號的字符串分割
@davin:在正則表達式中捕獲圓括號會將捕獲的結果拼接到結果數組中,儘管它也包含空格。儘管如此,我無法用「分裂」和正則表達式得到完美匹配的結果。 – Reid 2011-05-28 15:45:27