RegExp(Javascript)最小长度和管道后的最小长度(如果存在管道)

RegExp(Javascript)最小长度和管道后的最小长度(如果存在管道),javascript,regex,Javascript,Regex,我正在尝试编写一个正则表达式,它至少需要4个字符,如果用管道分隔,则每个管道后面至少有4个字符 例如,这些条目将是有效的: weather|bronco|flock weather 鉴于,这些人不会: red weather|br||flock|red 到目前为止,我所做的几乎都是有效的,只是它允许用户在进入另一个管道之前只添加1个字母数字: ^((?:(?!([|][|])|^[|]|[|]\\s|[|]$).)*) var array=“weather | br | | flock |

我正在尝试编写一个正则表达式,它至少需要4个字符,如果用管道分隔,则每个管道后面至少有4个字符

例如,这些条目将是有效的:

weather|bronco|flock
weather
鉴于,这些人不会:

red
weather|br||flock|red
到目前为止,我所做的几乎都是有效的,只是它允许用户在进入另一个管道之前只添加1个字母数字:

^((?:(?!([|][|])|^[|]|[|]\\s|[|]$).)*)
var array=“weather | br | | flock | red”。拆分(“|”)//[“天气”、“br”、“羊群”、“红色”]
var valid=true;
//现在迭代数组并检查是否有任何项长度小于4
对于(var i=0;i
如果您确实需要正则表达式,可以使用以下命令

^(\w{4,}\|)+\w{4,}$

我假设您需要管道之间的
\w
。可以将其更改为其他符号。(例如,如果希望允许除管道以外的任何内容,可以将其替换为
[^ |]

没有正则表达式:

valid = true;
for(word in "string|with|pipes".split()) {
    if(word.length < 4) {

        valid = false;
        break;
    }
}
valid=true;
for(字符串中的单词带有管道)。split(){
如果(字长<4){
有效=错误;
打破
}
}

没有正则表达式更容易:

'foo|bar||baz'.split('|').every(function(elem) {
    return elem.length >= 4;
});
但是,如果您坚持使用正则表达式,这应该是可行的:

/^[^|]{4,}(?:\|[^|]{4,})*$/

您可以使用此模式执行此操作:

var regex = /^(?:\w{4,}\|?)+$/
或具有更多约束:

var regex = /^(?:\w{4,}(?:\|(?!$))?)+$/

管道后面允许出现什么字符,你试过什么吗?你真的需要正则表达式吗?你试过做正则表达式吗?你走了多远?我们能看看吗?为什么它不起作用?最接近于让它起作用:^((?:(?!([|][|]])| ^[|][|]\\s |[|]]$)*)他想要一个正则表达式,为什么要花时间拆分,然后验证何时可以一步完成我想说是的,但我还没有回答的原因是因为他的术语非常不具体,回答这个问题需要我做出很多努力assumtions@aaronman:)我只是想尽力帮助他,你可以试试你的方法,没有冒犯我宁愿一步完成验证,也不必遍历数组-虽然那会起作用,但在我的情况下是不可行的。你为什么认为他不应该使用正则表达式,他在验证字符串你为什么建议不使用正则表达式?我刚刚有另一个用户指责我这样做,哈哈!因为正则表达式是用于此目的的重型工具。@user2581889,添加了遗忘的“\”和DEMOThis,非常接近。它检查至少4个字符,但如果在输入字符后输入字符长度,则无效pipe@user2581889:你的测试字符串是什么?那个正则表达式比它需要的复杂得多
/^[^ |]{4,}(?:\\\\.[^ |]{4,})*$/
做了同样的事情。@user2581889:但是,这也非常接近:^((?:(?!([|][|][|]\\s.[|]$)*)
var regex = /^(?:\w{4,}(?:\|(?!$))?)+$/