我为使以下正则表达式正常工作(VB.NET)而感到困惑
输入:
const arr1 = [27, 54, 67, 11, 15, 22, 26, 58, 45, 87];
let arr2 = [];
function getRandom(){
var randomNumber = arr1[Math.floor(Math.random()*arr1.length)];
while(arr2.indexOf(randomNumber) !== -1 && arr2.length !== arr1.length) {
randomNumber = arr1[Math.floor(Math.random()*arr1.length)];
}
arr2.push(randomNumber);
}
getRandom(); getRandom(); getRandom(); getRandom(); getRandom(); getRandom(); getRandom(); getRandom(); getRandom(); getRandom();getRandom();
console.log(arr2);
预期输出:
+1.41 DS +0.93 DC x 3* @12.5 mm (4.00 Rx Calc)
我已经得到以下表达式:
+0.93
这将返回结果
DS[ \t]*[+\-][ \t]*\d{1,2}\.\d{2}
当我将正则表达式修改为时,我只需要返回+0.93(没有任何前导空格):
DS +0.93
我得到了无法识别的错误分组结构,我不明白为什么它会给我这个错误。我认为我的不匹配小组不正确,但是我找不到原因/位置?
答案 0 :(得分:1)
您可以在此处使用积极的表情:
(?<=DS[ \t]*)[+-][\t ]*\d{1,2}\.\d{2}
^^^
请参见regex demo
要确保将数字和DS
匹配为整个单词(前后没有字母,数字或_
),请使用单词边界:
(?<=\bDS[ \t]*)[+-][\t ]*\d{1,2}\.\d{2}\b
或者在(?!\d)
之后出现\d{2}
否定查找:
(?<=\bDS[ \t]*)[+-][\t ]*\d{1,2}\.\d{2}(?!\d)
详细信息
(?<=\bDS[ \t]*)
-向后的正向匹配,它与字符串中的位置相匹配,该位置紧随其后的是整个单词DS
,后跟0+空格或制表符[+-]
-一个+
或-
[\t ]*
-0多个空格或制表符\d{1,2}
-1或2位数字\.
-一个点\d{2}
-2位数字(?!\d)
-当前位置右边不允许有数字。Dim my_rx As Regex = New Regex("(?<=\bDS[ \t]*)[+-][\t ]*\d{1,2}\.\d{2}(?!\d)")
Dim my_result As Match = my_rx.Match(" +1.41 DS +0.93 DC x 3* @12.5 mm (4.00 Rx Calc)")
If my_result.Success Then
Console.WriteLine(my_result.Value) ' => +0.93
End If