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

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

本文关键字:起来 字符串 不匹配 单引号      更新时间:2023-09-26

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

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

试试这样:

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

现场演示

如果您没有严格限制regex,您可以使用函数"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