Javascript正则表达式:匹配所有字母数字字符,允许破折号空格和下划线除了所有空格

时间:2017-01-27 18:05:22

标签: javascript regex

我需要一个允许使用字母数字,破折号,下划线+空格的正则表达式。

但是,我需要不匹配所有空格的输入。研究,这听起来像一个负面的前瞻的情况?

我的第一次尝试如下:

public static void main(String[] args) {
    String conservedString = "ABC";
    int n = 5;
    if (conservedString.length() > n) {
        throw new RuntimeException("Invalid length of the conserved string: " + conservedString.length());
    }
    String initialString = conservedString + Stream.iterate("X", x -> "X").limit(n - conservedString.length()).reduce("", (a,b) -> a+b);
    List<String> result = permutation(initialString)
        .stream()
        .filter(x -> {
            for (int i=0; i<conservedString.length()-1; i++) {
                if (x.indexOf(conservedString.charAt(i)) > x.indexOf(conservedString.charAt(i+1))) {
                    return false;
                }
            }
            return true;
        })
        .peek(System.out::println)
        .collect(Collectors.toList());
}

但这似乎并没有成功。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

不是负面的预测,而是对非空间的正面预测。

/^(?=.*\S)[- \w]+$/

答案 1 :(得分:0)

我不认为你可以使用正则表达式来确保整个字符串不是空格...我会在值上运行varString.trim()。

这样做,你的regEx变得非常简单......

[\w\d\-_ ]+

如果修剪了该值,那么+ 1或更高的要求将对您确保整个字符串不是空格有效。此外,破折号是一个用于范围的特殊字符,所以我认为它需要被转义

\ w适用于任何字母字符,\ s适用于任何空格(请记住,如果修剪一个只有空格的字符串变为空字符串并且不匹配),\ d匹配任何数字

编辑:用空格字符代替\ s,因为我不认为你想换行或标签?