string.split(separator,limit)
参数sepatator,limit是可选的;
separator可以是字符串或正则表达式,limit是返回的数组的最大长度。
以JS为例,对于一个字符串
例如:var string = "gogo dasfj 77. 67.45 0.3 goie! sd-af ggjei? huiwoo 78.23? papfc asf. How 'are' you?";
想要拆分出单词和数字比较麻烦,如果用空格进行匹配会有一些奇怪的东西混入单词或数字元素中。
由两种思路:
- 先用空格进行分割,再对各元素进行修正,也就是去掉其中不必要的标点符号;
- 匹配非目标成分直接用正则表达式分割。
第一种方法:
<script>
var string = "gogo dasfj 77. 67.45 0.3 goie! sd-af ggjei? huiwoo 78.23? papfc asf. How 'are' you?";
document.write(string + "<br>")
var stringsp = string.split(" ");
document.write(stringsp + "<br>-->" + stringsp.length + "<br>");
for(x in stringsp) {
stringsp[x] = stringsp[x].match(/[\w-]+(?:[\.]{1}[0-9]+)?/);
document.write(stringsp[x] + "<br>");
}
document.write("结束<br>");
</script>
运行结果:
[\w-]==[A-Za-z0-9_-],
(?:[\.]{1}[0-9]+)?匹配但不获取小数点+小数部分的数字子串。
第二种方法:
<script>
var string = "gogo dasfj 77. 67.45 0.3 goie! sd-af ggjei? huiwoo 78.23? papfc asf. How 'are' you?";
document.write(string + "<br>")
//(?<!pattern)
var patternsp = /[\.]{1}(?![0-9]+)[\s]*|[^\w-\.$]+/;
var stringsp = string.split(patternsp);
stringsp.pop();
document.write(stringsp + "<br>-->" + stringsp.length + "<br>");
for(x in stringsp) {
document.write(stringsp[x] + "<br>");
}
document.write("结束<br>");
</script>
运行结果:
思路:
- 数字中的小数点和句子中的句号点冲突,先用区分两者;
- [\.]{1}(?![0-9]+)[\s]*句子中的句号点及后面可能带有的空格,[\.]{1}(?![0-9]+)匹配后面不带数字的".";
- 对拆分的子串使用[^\w-\.$]+拆分出单词和数字,屏蔽句子中的句号点的干扰。
- 注意:末尾的标点符号也会参与拆分,最后数组尾部会带有一个""元素,需要pop()删除。