我是regex和Javascript的新手。我有以下问题:需要在文本字段中检查是否存在一(1)个或多个(n)连续*
(星号)字符/字符,例如。 *
或**
或***
或无限(n)*
。字符串允许例如。 *tomato
或tomato*
或**tomato
或tomato**
或many(n)*tomato many(n)*
。所以,到目前为止,我尝试了以下内容:
var str = 'a string'
var value = encodeURIComponent(str);
var reg = /([^\s]\*)|(\*[^\s])/;
if (reg.test(value) == true ) {
alert ('Watch out your asterisks!!!')
}
答案 0 :(得分:2)
根据你的问题,很难解读你之后的事情......但是让我尝试一下:
如果您只允许在开头或结尾(但不是在两侧)使用任意数字(至少一个)星号,例如:
*****tomato
tomato******
**tomato*****
然后使用这个正则表达式:
reg = /^(?:\*+[^*]+|[^*]+\*+)$/;
如果您要求biginning的星号数与最后的星号数相匹配
*****tomato*****
*tomato*
**tomato*****
然后使用这个正则表达式:
reg = /^(\*+)[^*]+\1$/;
从您的问题中不清楚当每个正则表达式匹配时结果应该是什么?对您和您的要求是正确或错误地对正常表达式测试为正的字符串。只要你有正确的正则表达式,你就可以提供所需的功能。
我还编写了正则表达式,只是在字符串中排除星号。如果您还需要拒绝空格或其他任何内容,只需调整上述表达式的[^...]
部分。
注意:这两个正则表达式都未经过测试,但应该让您开始在代码中构建实际需要和需要的正则表达式。
答案 1 :(得分:1)
如果我理解正确你正在寻找这样的模式:
var pattern = /\**[^\s*]+\**/;
这与*****
或** ***
等字符串不匹配,但会匹配***d*** *d
或您说的有效的所有示例(***tomatos
等)。<如果我误解了,请告诉我,我会看到我能做些什么来帮助你。 PS:我们都在某个时候开始作为新手,没有什么值得羞耻的,更不用说道歉了。)
在编辑你的问题之后,我收集了在输入的开头或结尾需要使用星号,但字符串还必须包含至少1个其他字符,所以我提出以下解决方案:
var pattern = /^\*+[^\s*]+|[^\s*]+\*+$/;
'****'.match(pattern);//false
' ***tomato**'.match(pattern);//true
如果不允许*tomato*
,则必须将正则表达式更改为:
var pattern = /^\*+[^\s*]+$|^[^\s*]+\*+$/;
Here's一个方便的网站,可以帮助您在正则表达式的神奇世界中找到自己的方式。