空格和引号的正则表达式

时间:2011-01-03 17:25:38

标签: javascript regex

我已经阅读了一些关于正则表达式的其他教程,但是我仍然无法正确创建我需要的东西。

我有一个onblur函数可以做到这一点......

var x = $("#outputpathid").val();     
var testwhitespace = new RegExp(/\s/g);
var testdoublequotes = new RegExp(/^\"|\"$/);

if (testwhitespace.test(x) && !testdoublequotes.test(x)) {
            $("#outputPathDivWhitespace").dialog({
                title: 'Output Path contains whitespace. Click the \'Close\' button to add quotes.',
                width: 500,
                modal: true,
                resizable: false,
                buttons: {
                'Close': function() {
                        $("#outputpathid").val('"'+x+'"');
                        $(this).dialog('close');
                    }
                }
            });
        }

...我希望函数测试输入字段字符串x是否包含空格。如果是,还要检查是否有引号。如果没有引号并且它包含空格,则在整个字符串周围添加引号。这样可以正常工作,直到字符串有开头或结尾。

我正在寻找某种类型的'和'运算符来替换testdoublequotes var中的管道。我发现我应该使用'?',但无法让它工作。

有人可以帮忙吗?如果您提供答案,请准确说明您的所作所为,以便了解正在发生的事情。谢谢!

4 个答案:

答案 0 :(得分:3)

/^".*"$/

使用.*匹配< anything>在双引号之间。 .匹配任何字符,*匹配任意数量的任何。所以.*匹配任何数字的任何数字。

顺便说一句,双引号不需要转义。我删除了反斜杠。

答案 1 :(得分:2)

以下是根据您的评论修改的答案。我认为它可以满足您的需求,因为它也可以处理缺失的引号。

function q(str) {
  return (/\s/g).test(str) 
    ? str.replace(/^"?(.*?)"?$/, function(str, value) {
        return '"' + value + '"';
      })
    : str;
}

DEMO: http://jsbin.com/apeva3/edit

说明:

传递一个字符串,它将根据需要添加双引号

  1. 如果字符串有空格(/\s/g).test
  2. 替换不是开头的所有内容“或结束”
    • replace可以使用lambda函数,它会传递整个匹配的字符串,然后是每个组function(str /*whole string*/, value /* group 1 */)
    • 字符串由lambda返回的任何内容替换
    • 在这种情况下,replace返回引号
    • 所包含的引号内的任何内容

  3. 旧答案

    你的空白测试看起来不错。 如需报价,请尝试:

    /^(['"])​​​​​​​​​​​​​​.*?\1$/​​​​​​​​​​​​​​​​​
    

    以下是它的工作原理:

    1. 如果第一个字符'或'与之匹配,则记住值^(['"])
    2. 现在匹配任意数量的字符非贪婪.*?
    3. 然后匹配\1
    4. 之前记住的内容
    5. $
    6. 的结尾

答案 2 :(得分:0)

我认为问题在于这一行:var testdoublequotes = new RegExp(/^\"|\"$/); 您正在测试的是,如果它开始或以双引号结束,但您想知道它是否在双方都有一个(即以双引号开头和结尾)。在这种情况下,您可以使用。*来查找引号之间的任何内容,如:

var testdoublequotes = new RegExp(/^\".*\"$/);

答案 3 :(得分:0)

以下是我的所作所为:http://www.jsfiddle.net/bradchristie/UhwWw/
(引用转义的第二个版本:http://www.jsfiddle.net/bradchristie/UhwWw/2/

鳕鱼证明如下:

<input type="text" id="x" /><br />
<span id="x-modified"></span>

和JS:

var whiteSpace = /\s/;
var quotes = /^\x22?(.*?)\x22?$/;
$('#x').change(function(){
    // First grab the value inside the field
    var xValue = $(this).val();

    // next, check for whitespace
    if (whiteSpace.test(xValue)){
        // there is white space. So now check for quotes. If there are quotes
        // (either surrounded or on one side) grab only the value (less the
        // quotes) then re-surround it.
        var xTempValue = xValue.match(quotes)[1] || xValue;
        xValue = '"'+xTempValue+'"';
    }

    // dump the quoted value.
    $('#x-modified').text(xValue);
});