Javascript 使用正则表达式的字符串中相似字符的唯一序列
我有一些测试字符串:Javascript 使用正则表达式的字符串中相似字符的唯一序列,javascript,regex,Javascript,Regex,我有一些测试字符串: “x” “嗯” “x毫米” “yy x毫米” “xx毫米y毫米” 我想制作一个正则表达式,它应该匹配字符串1,2,3,4,而不是5 所以我的匹配限制是: /(?=^[xym\W]+$)((?=^([^m]*\W)?m+(\W[^m]*)?$)|(?=^([^x]*\W)?x+(\W[^x]*)?$)|(?=^([^y]*\W)?y+(\W[^y]*)?$))/ 字符串中应出现一个字母序列。(例如,“y”是一个y序列,“yy”是两个y的序列,但它们包含相同的字母表,因此它们
/(?=^[xym\W]+$)((?=^([^m]*\W)?m+(\W[^m]*)?$)|(?=^([^x]*\W)?x+(\W[^x]*)?$)|(?=^([^y]*\W)?y+(\W[^y]*)?$))/
/(?=^[xym\W]+$)((?=^([^m]*\W)?m+(\W[^m]*)?$)|(?=^([^x]*\W)?x+(\W[^x]*)?$)|(?=^([^y]*\W)?y+(\W[^y]*)?$))/
但它也与第5个案例相匹配。您可以使用
/^(?!.*\b([xym])\1*\b.*\b\1+\b)(?:\s*\b([xym])\2*\b)*\s*$/
看
详细信息
-字符串的开头^
-如果在字符串开始后立即出现错误,则会导致匹配失败的负前瞻(?!.*\b([xym])\1*\b.*\b\1+\b)
-除换行符以外的任何0+字符,尽可能多*
-由相同字符组成的一个完整单词,\b([xym])\1*\b
,x
或y
m
-除换行符以外的任何0+字符,尽可能多*
-由组1中捕获的字符组成的整个单词\b\1+\b
-0次或多次重复(?:\s*\b([xym])\2*\b)*
-0个或更多空格字符\s*
-由一个或多个相同字符组成的一个完整单词,\b([xym])\2*\b
,x
或y
m
-0个或更多空格字符\s*
-字符串结束$
mm
出现两次,而不是其中有四个序列?序列可以混合字符吗?“xy mx”
有效吗?@T.J.Crowder yesOkay。请用所有这些更新问题。请注意,“y”不是序列,而是字母(字符)。为了清楚起见,这很重要,因为“y”和“yy”是不同的序列,但它们使用相同的字母。请尝试使用/^(?。*\b([xym])\1*\b.*\b\1+\b)\s*[xym\s]+\s*$/
,请参见。在这种情况下,“mmm yyy xxyyyx”字符序列必须包含相同的字符。@RK_15^(?。*\b([xym!))\b.*\b([xym m])\b.\1+\b)(?:\s*\b([xym 2*\b)*\s*$
它失败了,这个案例是“mmmyy yyy xxx”@RK_15有一个用于mmmyy yyy xxx
,不是预期的吗<代码>yy是重复的,我没有在Regex101网站上尝试过,但在chrome控制台中,此语句返回false->/^(?。*\b([xym])\1*\b.*\b\1+\b)(?:\s*\b([xym])\2*\b)*\s*$/.test(“mmmyy yyy xxx”)