我需要为只包含字母字符和短划线符号( - )的单词创建一个正则表达式。它不能连续重复(例如 - )。这是我的正则表达式函数:
var regex = new RegExp(/(\w*\-{0,1})*/);
此功能应适用于:home-do
g或类似home-dog-bird
之类的词,但不适用于home--dog
之类的词。我该怎么测试呢?
答案 0 :(得分:3)
你可以使用负向前看来做到这一点。
var regex=new RegExp(/^(\w|-(?!-))+$/);
这样做的目的是匹配仅包含字母数字字符的内容和-
只有在没有其他-
后才会出现的情况。
有关javascript正则表达式可能的更多详细信息,请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions。
答案 1 :(得分:0)
如果您反过来思考(向后而不是向前),您可以创建一个正则表达式,断言每个匹配以一个或多个单词字符开头,后跟零个或多个单个短划线,单词对< / p>
https://regex101.com/r/xT7aT5/2
/^\w+(-\w+)*$/
不确定这是否是最佳方法。我喜欢Py。的最佳回答。
答案 2 :(得分:0)
另一个没有前瞻的人:
/^(-?\w+)*-?$/
答案 3 :(得分:0)
另一个解决方案,为单个短划线和单词寻找单词和可选。
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>');
答案 4 :(得分:0)
你也可以试试这个:
var regex = new RegExp(/^(\w*(\-\w)\w*)*$/);
答案 5 :(得分:0)
答案 6 :(得分:-1)
试试这个正则表达式
/^([^-]*-{0,1}[^-]*)$/