如果您可以 100% 保证:
- 字母字符串为 2 或 3 个字符
- 总是有一个或多个素数/逗号
- 在字母和标记之前、之后或中间没有任何空格
(除了换行符)
您可以使用:
/^([a-zA-Z]{2,3})('+|,+)$/gm
var arr = /^([a-zA-Z]{2,3})('+|,+)$/gm.exec("pok'''");
arr === ["pok'''", "pok", "'''"];
var arr = /^([a-zA-Z]{2,3})('+|,+)$/gm.exec("baf,,,");
arr === ["baf,,,", "baf", ",,,"];
当然,请保持理智,并将 RegEx 保存为 var。
作为警告,如果您没有像这样处理过正则表达式:如果未找到匹配项 - 如果您尝试foo',''
通过混合标记进行匹配,或者您有 0-1 或 4+ 个字母,或者 0 标记.. . ...然后你不会得到一个数组,你会得到null
.
所以你可以这样做:
var reg = /^([a-zA-Z]{2,3})('+|,+)$/gm,
string = "foobar'',,''",
result_array = reg.exec(string) || [string];
在这种情况下,exec 的结果为 null;通过把 || (或)在那里,我们可以返回一个包含原始字符串的数组,作为 index-0。
为什么?
因为成功执行的结果将有 3 个插槽;[*string*, *letters*, *marks*]
. 您可能很想只阅读像result_array[1]
. 但是如果匹配失败result_array === null
,那么 JavaScript 会因为你的尝试而尖叫null[1]
。
因此,在失败的 exec 末尾返回数组将允许您获取result_array[1] === undefined
(即:与模式不匹配,因此 index-1 中没有字母),而不是 JS 错误。