正则表达式匹配排除括号的字符串

时间:2018-06-18 08:40:45

标签: javascript regex match

我有以下字符串,想要匹配不在括号中的字符串"()"。

我已经尝试了以下但是它给了支架匹配,我想反过来。



    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));

2 个答案:

答案 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后跟(字符(感谢(?=\()预测)。