Java regex匹配空格,当它不应该[重复]

问题描述 投票:-1回答:1

我正在尝试验证用户输入的存储在数组中的主机名列表。我有一个应与有效主机名匹配的正则表达式模式(请参阅regex101上的操作)。 它不匹配任何包含空格的字符串。

当我在JS playground或实际执行环境(ServiceNow工作流程)中运行此代码时,带有空格的数组元素是匹配的

带空格的元素不应匹配,应过滤掉。我在这里想念什么?

到底发生了什么?!

var targets_raw = ["google.com","hello world","shop.fsf.org"];

// this regex tests if a string is a valid hostname
const regex = new RegExp('^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$', 'g');

function validateHost(host) {
    return host.match(regex)
}

// trim whitesace and check for valid hostname
for (var i = 0; i < targets_raw.length; i++) {
    targets_raw[i] = targets_raw[i].trim();
    if (!validateHost(targets_raw[i])) {
        console.log(targets_raw[i] + ' is not a valid hostname. It will be omitted.');
    }
}

// remove any invalid hostnames
var targets = targets_raw.filter(validateHost);
console.log(targets);

控制台输出:[ "google.com", "hello world", "shop.fsf.org" ]所需的输出:[ "google.com", "shop.fsf.org" ]

javascript regex servicenow
1个回答
3
投票

您不正确地转义了.字符。 JS正则表达式需要两个反斜杠来转义字符。

[a-zA-Z0-9])\.不正确[a-zA-Z0-9])\\.是正确的

尝试使用此代码:

const regex = new RegExp('^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$', 'g');

Demo

© www.soinside.com 2019 - 2024. All rights reserved.