我正试图获得一个可以从1-10获得的正则表达式而且我遇到了麻烦
我试过了:
/^[1-9]|10$/ //this will matches out 1-9 but not 10
/^10|[1-9]$/ //this will matches 10 but no 1-9 digits
我觉得很奇怪,因为我以前见过这个问题,人们说这些表达中的任何一个都应该有用。从1-10开始获得#的另一种方式的想法?
答案 0 :(得分:1)
假设您要匹配包含数字1-10的字符串而不是其他内容,则表示您与/^[1-9]|10$/
关系密切。这里的问题是交替|
包含^
和$
个字符,即此表达式将与^[1-9]
匹配(任何以1-9 {{1}开头的字符串10 $`(任何以10结尾的字符串)。圆括号解决这个问题:
) or
请参阅下面的操作:
/^([1-9]|10)$/

const regex = /^([1-9]|10)$/gm; // `gm` flags for demo only; read below
const str = `1
2
3
4
foo
5
6
7
8
9
10`;
let m;
while (m = regex.exec(str)) {
console.log('Found match:', m[0]);
}

该代码段使用.as-console-wrapper{min-height:100%}
和g
标记来查找多行的所有匹配项。 m
使m
和^
匹配每行的开头和结尾,而不是字符串的开头和结尾。对于您的用例,您可能不想要任何标记。
答案 1 :(得分:0)
在不知道具体用例的情况下,我没有理由将^和&这里,要求数字由行的起点和终点包围。即使你的内部正则表达式是正确的,它也不会匹配' 6'在:'我有一个6岁的儿子。'
相反,用\ b(单词边界)包围内部正则表达式。因此,使用Jordan的例子,\ b([1-9] | 10)\ b将匹配1-10中的所有数字。要在javascript中使用正则表达式,您需要使用几个接受它作为参数的函数之一,或者可以在其上调用的方法:
let regex = /\b([1-9]|10)\b/;
console.log('I have a 6 year old son.'.match(regex)[0]);
console.log('I have a six year old son.'.match(regex));
console.log('I have a 6 year old son.'.replace(regex, 'six'));
console.log(regex.test('I have a 6 year old son.'));
console.log(regex.test('I have a six year old son.'));