我总是有一个以字母或数字开头的订单号。例如271546.随着订单发货,如果订单上的零件不发货,则会创建子订单,例如271546-1我想做的是创建一个将找到271546,但不包括271546-1顺序的正则表达式。例如它找到-1。如果订单更大,我们可以看到原始订单号的-2,-3,-4变体。我已经搜索了,但是找不到解决方案。例如[-1] $或^([^-1] | -1([^-2] | -2([^-3] | $)| $)| $)。* $
任何帮助都将不胜感激!
答案 0 :(得分:0)
^([A-Z]-?)?\d+$
将匹配271546,W-100716和Q696157,但不匹配271456-1,W-271456-3或Q696157-2。
有关示例和说明,请参见regex101。
^([A-Z]-)?\d+$
将匹配271546和W-100716,但不匹配271456-1或W-271456-3。如果需要,可以将小写字母添加到字符范围:^([a-zA-Z]-)?\d+$
,然后它也将匹配w-100716。
有关示例,请参见regex101。
假设您只是在匹配订单号,而不是尝试在较大的文本块中找到订单号,则^\w+
会起作用。如果订单只是数字,则可以使用^\d+
。
有关示例,请参见regex101。
答案 1 :(得分:0)
如果您的值可以以字母开头,后接破折号或仅数字,则可以使用:
说明
(?:
断言行的开头[a-zA-Z]-
非捕获组
)?
匹配小写或大写字母,后接破折号\d+
关闭非捕获组并将其设置为可选$
匹配一个或多个数字[a-z]
声明行的结尾请注意,您可以将/i
与不区分大小写的const strings = [
"271546",
"271456-1",
"271456-2",
"271456-3",
"W-100716"
];
let pattern = /^(?:[a-z]-)?\d+$/i;
strings.forEach((s) => {
console.log(s + " ==> " + pattern.test(s));
});
一起使用。
var app = angular.module('MainApp', ['ngRoute', 'ngMaterial']);
app.run(function ($rootScope, $location, $templateCache, roleAuthorization) {
$rootScope.$on('$viewContentLoaded', function () {
$templateCache.removeAll();
});
$rootScope.$on('handleEmit', function (event, args) {
console.log("handling emit");
$rootScope.role = args.role;
$rootScope.$broadcast('handleBroadcast', {role: args.role});
roleAuthorization.setAuthRole(args.role);
});
$rootScope.$watch(function() {
return $location.path();
},
function(a){
console.log("Here we go: " + $rootScope.userRoleValue);
if(a !== '/pharmacy/' && a !== '/users/login/' && a !== '/' && roleAuthorization.getAuthRole() === 'pharmacy'){
window.location.href = '/pharmacy/';
}
});
});
app.service('roleAuthorization', function ($rootScope) {
$rootScope.userRoleValue = '';
this.getAuthRole = function () {
return $rootScope.userRoleValue;
};
this.setAuthRole = function (x) {
console.log("auth role set to " + x);
$rootScope.userRoleValue = x;
console.log('rootscope var is ' + $rootScope.userRoleValue);
};
});