根据javascript中的侧翼字符拆分字符串

时间:2016-11-03 19:08:08

标签: javascript

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"]

2 个答案:

答案 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前瞻。您正在使用捕获找到的所有字符的正则表达式,然后将该结果用作拆分字符。