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

时间:2014-03-25 06:02:12

标签: javascript regex string

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

示例1:

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

a 的整个值应该匹配,因为它用单引号括起来。

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

示例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'

3 个答案:

答案 0 :(得分:6)

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

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

live on 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)

答案 1 :(得分:1)

尝试这样的事情:

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

Live Demo

答案 2 :(得分:0)

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

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