将字符串拆分为字母数字和其他字符串

时间:2016-04-01 08:06:54

标签: javascript regex

如何将字符串拆分为字母数字和非字母数字字符串组?

var str = "abcd !!hh8kK*( abcd efgh"
//some split logic that can give me
['abcd', ' !!', 'hh8kK', '*( ', 'abcd', ' ', 'efgh']

3 个答案:

答案 0 :(得分:3)

尝试:



var str = "abcd !!hh8kK*( abcd efgh";
var result = str.split(/(\w+)/);
result = result.slice(1, result.length-1); // remove trailing empty strings
document.body.innerHTML = JSON.stringify(result);




答案 1 :(得分:3)

您可以使用以下正则表达式:

/([A-Za-z0-9]+|[^A-Za-z0-9]+)/g

Regexper Visualisation

并使用JavaScript match方法应用它:

"abcd !!hh8kK*( abcd efgh".match(/([A-Za-z0-9]+|[^A-Za-z0-9]+)/g)
-> ["abcd", " !!", "hh8kK", "*( ", "abcd", " ", "efgh"]

这匹配一个或多个字母数字字符一个或多个非字母数字字符。

我在这里没有使用\w+,因为它匹配下划线(_)和连字符(-)。

答案 2 :(得分:2)

即使使用不同字母表中的其他Unicode字符,这也应该可以使用。

var result = "abcd !!hh8kK*( abcd efgh".split(/\b/g);

在上面的代码中,我们在字边界\b - Word Boundaries上拆分了一个带有正则表达式的字符串。

以下示例:



var input = document.getElementById("input");
var output = document.getElementById("output");

var result = input.value.split(/\b/g);

result.forEach(function(item, index) {
  output.innerHTML += "Matched item at index " + index + ": <b>`" + item + "`</b><br> \n";
});
&#13;
<input id="input" type="text" value="abcd !!hh8kK*( abcd efgh">
<p id="output"></p>
&#13;
&#13;
&#13;