Javascript允许您根据正则表达式拆分字符串。是否可以使用此功能仅在分隔符旁边有某些字符时拆分字符串?
例如,如果我想使用12-93
字符拆分字符串at-13
而不是-
?这可能吗?
使用正则表达式似乎很有希望,但执行"12-93".split(/[0-9]-[0-9]/)
会产生["1", "3"]
,因为侧翼数字被认为是分隔符的一部分。
我可以指定上面的分割模式(前面跟一个数字后面跟一个短划线)而不会砍掉侧翼数字吗?
其他示例
"55,966,575-165,162,787"
应该产生["55,966,575", "165,162,787"]
"55,966,575x-165,162,787"
应该产生["55,966,575x-165,162,787"]
"sdf55,966,575-165,162,787"
应该产生["sdf55,966,575", "165,162,787"]
答案 0 :(得分:1)
使用两个相邻的字符集似乎有效。
请参阅https://regex101.com/r/uFHMW1/1
上的示例 ([0-9,a-z]+?[0-9]+)-([0-9]+[0-9,a-z]+)
试试这个(住在这里https://repl.it/EOOQ/0):
var strings = [
"55,966,575-165,162,787",
"55,966,575x-165,162,787",
"sdf55,966,575-165,162,787",
];
var pattern = '^([0-9,a-z]+?[0-9]+)-([0-9]+[0-9,a-z]+)$';
var regex = new RegExp(pattern, 'i');
var matched = strings.map(function (string) {
var matches = string.match( regex );
if (matches) {
return [matches[1], matches[2]];
} else {
return [string];
}
});
console.log(matched)

您还可以将上述表达式运行为split()
,如:
string.split(re).filter( str => str.length )
其中Array.filter()
用于删除RegExp与输入匹配时创建的前导和尾随空字符串。
var strings = [
"55,966,575-165,162,787",
"55,966,575x-165,162,787",
"sdf55,966,575-165,162,787",
];
var pattern = '^([0-9,a-z]+?[0-9]+)-([0-9]+[0-9,a-z]+)$';
var regex = new RegExp(pattern, 'i');
var matched = strings.map( string => string.split(regex).filter( str => str.length ) );
console.log(matched)

答案 1 :(得分:0)
尝试使用non-capturing
前瞻。您正在使用捕获找到的所有字符的正则表达式,然后将该结果用作拆分字符。