JavaScript RegExp - g修饰符不起作用

时间:2017-11-01 17:32:27

标签: javascript regex jscript testcomplete

我几个小时以来一直坚持这个愚蠢问题。我知道这似乎很愚蠢,但我真的不知道我错过了什么。任何帮助将不胜感激。

这是我的问题:

var objReg = /touch/g;
var str = "abc touch def touch";
var arr = objReg.exec(str);

这里我希望数组arr包含2个元素,但它只包含第1个元素,即使我确保放置g修饰符。

任何人都可以指导我在这里做什么吗?

调试:如下图所示,该数组只有1个元素(index = 0)

enter image description here

2 个答案:

答案 0 :(得分:6)

var cgImage = ImageView1.Image.CGImage; // Your UIImage with a CGImage backing image var bytesPerPixel = 4; var bitsPerComponent = 8; var bytesPerUInt32 = sizeof(UInt32) / sizeof(byte); var width = cgImage.Width; var height = cgImage.Height; var bytesPerRow = bytesPerPixel * cgImage.Width; var numOfBytes = cgImage.Height * cgImage.Width * bytesPerUInt32; IntPtr pixelPtr = IntPtr.Zero; try { pixelPtr = Marshal.AllocHGlobal((int)numOfBytes); using (var colorSpace = CGColorSpace.CreateDeviceRGB()) { CGImage newCGImage; using (var context = new CGBitmapContext(pixelPtr, width, height, bitsPerComponent, bytesPerRow, colorSpace, CGImageAlphaInfo.PremultipliedLast)) { context.DrawImage(new CGRect(0, 0, width, height), cgImage); unsafe { var currentPixel = (byte*)pixelPtr.ToPointer(); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { // RGBA8888 pixel format if (*currentPixel == byte.MinValue) { *currentPixel = byte.MaxValue; *(currentPixel + 1) = byte.MaxValue; *(currentPixel + 2) = byte.MaxValue; } else { *currentPixel = byte.MinValue; *(currentPixel + 1) = byte.MinValue; *(currentPixel + 2) = byte.MinValue; *(currentPixel + 3) = byte.MinValue; } currentPixel += 4; } } } newCGImage = context.ToImage(); } var uiimage = new UIImage(newCGImage); imageView2.Image = uiimage; // Do something with your new UIImage } } finally { if (pixelPtr != IntPtr.Zero) Marshal.FreeHGlobal(pixelPtr); } 修饰符会使正则表达式对象保持状态。它在最后一场比赛后跟踪索引。如果你想使用g,你可以使用一个循环,它会自动开始在适当的位置搜索字符串。

.exec()

答案 1 :(得分:5)

要获得所需效果,您需要与String.prototype.match()

进行匹配
var arr = str.match(objReg);

对于.exec()标志,RegExp g函数的行为方式不同。标志 使用.exec()执行某事但不执行.match()所做的事情。