我有以下字符串,想要匹配不在括号中的字符串"()"。
我已经尝试了以下但是它给了支架匹配,我想反过来。
package com.example.myapplication;
import android.content.Context;
import android.hardware.Camera;
import android.util.Log;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import java.io.IOException;
import static android.content.Context.WINDOW_SERVICE;
public class ImageSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private Camera mCamera;
private SurfaceHolder surfaceHolder;
Context context;
boolean isPreviewRunning = false;
public ImageSurfaceView(Context context, Camera camera) {
super(context);
this.mCamera = camera;
this.context = context;
this.surfaceHolder = getHolder();
this.surfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
this.mCamera.setPreviewDisplay(holder);
this.mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (isPreviewRunning) {
mCamera.stopPreview();
}
Display display = ((WindowManager)context.getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0) {
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90) {
}
if(display.getRotation() == Surface.ROTATION_180) {
}
if(display.getRotation() == Surface.ROTATION_270) {
mCamera.setDisplayOrientation(180);
}
previewCamera();
}
public void previewCamera() {
try {
mCamera.setPreviewDisplay(surfaceHolder);
mCamera.startPreview();
isPreviewRunning = true;
} catch(Exception e) {
Log.d("hsfhj", "Cannot start preview", e);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
this.mCamera.stopPreview();
this.mCamera.release();
}
}

任何人都可以帮助我吗?我想跟随输出: -
var str = '45.6 fl oz (456 g)';
console.log(str.match(/[\(]+[^\)]*\)/g));
答案 0 :(得分:3)
你需要捕获两组;一个针对不在()
中的文字和另一个针对()
中的文字的文字:
var str = '45.6 fl oz (456 g)';
console.log(str.match(/([^()])+|(\(.*\))/g).map(item => item.trim()));
答案 1 :(得分:2)
您可以使用/\s*(\([^()]*\))/
分割:
var str = '45.6 fl oz (456 g)';
console.log(str.split(/\s*(\([^()]*\))/).filter(Boolean));
//Or, split with whitespaces before a (:
console.log(str.split(/\s*(?=\()/));

模式匹配
\s*
- 0+空白字符(\([^()]*\))
- 捕获组#1(其值将是结果数组的一部分):
\(
- (
[^()]*
- (
和)
以外的任何0 +字符\)
- )
。要在结果中排除(
和)
,请调整捕获组边界:/\s*\(([^()]*)\)/
。
.filter(Boolean)
将删除在字符串开头/结尾找到匹配项时出现的冗余前导/尾随空数组项。
第二个变体/\s*(?=\()/
只匹配0+空格字符,即immediatley后跟(
字符(感谢(?=\()
预测)。