繁体   English   中英

RegEx:匹配用单引号括起来的字符串,但不匹配双引号内的字符串

[英]RegEx : Match a string enclosed in single quotes but don't match those inside double quotes

我想编写一个正则表达式来匹配用单引号括起来的字符串,但是不应该匹配带有双引号的单引号的字符串。

例1:

a = 'This is a single-quoted string';

整体价值应该匹配,因为它是封闭的单引号。

编辑:完全匹配应该是: '这是一个单引号字符串'

例2:

x = "This is a 'String' with single quote";

x不应返回任何匹配项,因为单引号位于双引号内。

我试过/'.*'/g但它也匹配双引号字符串中的单引号字符串。

谢谢您的帮助!

编辑:

使它更清楚

鉴于以下字符串:

The "quick 'brown' fox" jumps
over 'the lazy dog' near
"the 'riverbank'".

匹配应该只是:

'the lazy dog'

假设不必处理转义引用(这可能会使正则表达式复杂化),并且所有引用都是正确平衡的(没有像It's... "Monty Python's Flying Circus"! ),那么你可以看一下对于单引号字符串,后跟偶数个双引号:

/'[^'"]*'(?=(?:[^"]*"[^"]*")*[^"]*$)/g

在regex101.com上直播

说明:

'        # Match a '
[^'"]*   # Match any number of characters except ' or "
'        # Match a '
(?=      # Assert that the following regex could match here:
 (?:     # Start of non-capturing group:
  [^"]*" # Any number of non-double quotes, then a quote.
  [^"]*" # The same thing again, ensuring an even number of quotes.
 )*      # Match this group any number of times, including zero.
 [^"]*   # Then match any number of characters except "
 $       # until the end of the string.
)        # (End of lookahead assertion)

尝试这样的事情:

^[^"]*?('[^"]+?')[^"]*$

现场演示

如果你没有严格限制正则表达式,你可以使用函数“indexOf”来找出它是否是双引号匹配的子字符串:

var a = "'This is a single-quoted string'";
var x = "\"This is a 'String' with single quote\"";

singlequoteonly(x);

function singlequoteonly(line){
    var single, double = "";
    if ( line.match(/\'(.+)\'/) != null ){
        single = line.match(/\'(.+)\'/)[1];
    }
    if( line.match(/\"(.+)\"/) != null ){
        double = line.match(/\"(.+)\"/)[1];
    }

    if( double.indexOf(single) == -1 ){
        alert(single + " is safe");
    }else{
        alert("Warning: Match [ " + single + " ] is in Line: [ " + double + " ]");
    }
}

请参阅下面的JSFiddle:

的jsfiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM