我想编写一个正则表达式来匹配单引号中的字符串,但不应该匹配带双引号的单引号的字符串。
示例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'
答案 0 :(得分:6)
假设不必处理转义引号(这可能会使正则表达式复杂化),并且所有引号都是正确平衡的(不像It's... "Monty Python's Flying Circus"!
),那么你可以寻找单引号引用的字符串后跟偶数个双引号:
/'[^'"]*'(?=(?:[^"]*"[^"]*")*[^"]*$)/g
<强>解释强>
' # 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)
答案 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: