正则表达式“由分隔符连接的部分”?

时间:2014-10-08 08:45:27

标签: regex

E.g。我想测试一个字符串是一个以逗号分隔的列表,没有空元素。 (这也意味着字符串不以逗号开头或结尾。)

在程序上,我可以/会做这样的事情(例如JavaScript):

function isValid(str) {
    return str.split(',').every(function (substr) {
        return substr.length > 0;
    });
}

我可以用正则表达式实现吗?我正在努力做到这一点,也许是因为我没有像前瞻这样的功能。

谢谢!

3 个答案:

答案 0 :(得分:3)

我可能实际上有。

/^[^,]+(,[^,]+)*$/

这样说:从一个或多个非逗号开始,然后如果还有其他内容,则必须是逗号,后跟一个或多个非逗号,重复。

似乎适用于我测试过的所有情况:

// should pass:
x
xy
x,y
x,y,z

// should fail:
,
x,
,x
,x,
x,y,
,x,y
,x,y,

但我不确定我是否遗漏了任何案件。

答案 1 :(得分:0)

可能最简单的测试方法实际上是你不想要的东西 - 一个简单的表达方式:

/,\s*,/ 

将匹配两个逗号,它们之间没有非空白字符。

更简单一点,检查/,,/将返回两个相邻的逗号,这些逗号实际上与您在那里执行的测试相同,但它不会捕获到行尾。< / p>

这也会记录行开头和结尾:

/^,|,\s*,|,$/  // cuts out whitespace
/^,|,,|,$/     // if you're only interested in neighbouring commas.

答案 2 :(得分:0)

为何选择正则表达式?你想要 another problem 吗?

保持简单:

function isValid(str)
{

    // if first or last character is comma, its invalid
    if (str.charAt(0)==',' || str.charAt(str.length-1)==',')
        return false;

    // the length of the string    
    var length_before = str.length;

    // the length of the string after checking for empty csv elements (,,)
    var length_after = str.replace(/,,/g,'').length;

    // if there is a difference, there must be an empty element, so its invalid.
    // if there is no difference, is valid.
    return length_before==length_after;

}

这里的工作示例: http://jsfiddle.net/jw6sdu6q/1/

P.S。具有讽刺意味的是我正在使用替换全局标识符,这是唯一的解决方案AFAIK,谢谢你的javascript替换功能。