我已经阅读了一些关于正则表达式的其他教程,但是我仍然无法正确创建我需要的东西。
我有一个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中的管道。我发现我应该使用'?',但无法让它工作。
有人可以帮忙吗?如果您提供答案,请准确说明您的所作所为,以便了解正在发生的事情。谢谢!
答案 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
说明:
传递一个字符串,它将根据需要添加双引号
(/\s/g).test
function(str /*whole string*/, value /* group 1 */)
旧答案
你的空白测试看起来不错。 如需报价,请尝试:
/^(['"]).*?\1$/
以下是它的工作原理:
^(['"])
.*?
\1
$
答案 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);
});