如何测试只包含字母字符和短划线(-)[javascript]的字符串

how to test a string that contains only letter characters and dash(-) [javascript]

本文关键字:javascript 字符串 字符 测试 何测试 包含字      更新时间:2024-07-03

我需要为一个只包含字母字符和短划线(-)的单词创建一个正则表达式。它不能连续重复(例如--)。这是我的正则表达式函数:

var regex = new RegExp(/('w*'-{0,1})*/);

这个函数应该适用于像home-dog这样的词,甚至类似home-dog-bird的词,但不适用于类似home--dog的词。我该如何测试?

您可以使用负前瞻来实现这一点。

var regex=new RegExp(/^('w|-(?!-))+$/);

这样做的目的是匹配只包含字母数字字符和-的东西,前提是它后面没有另一个-

请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions有关javascript正则表达式的更多详细信息。

如果你反过来想(向后而不是向前),你可以生成一个正则表达式,断言每个匹配都以一个或多个单词字符开头,后面跟着零个或多个子单词对

https://regex101.com/r/xT7aT5/2

/^'w+(-'w+)*$/

但不确定这是否是最好的方法。我最喜欢皮的回答。

另一个没有前瞻性的:

/^(-?'w+)*-?$/

另一个查找单词的解决方案,对于单个短划线和单词是可选的。

function match(s) {
    return !!s.match(/^'w+('-'w+)*$/g);
}
document.write(match('dog') + '<br>');
document.write(match('dog-cat') + '<br>');
document.write(match('dog-cat-fish') + '<br>');
document.write(match('dog-cat--fish') + '<br>');

你也可以试试这个:

var regex = new RegExp(/^('w*('-'w)'w*)*$/);

这将在正文中匹配。

/'w+(-'w+)+/

https://regex101.com/r/hU0xH7/1

试试这个正则表达式/^([^-]*-{0,1}[^-]*)$/