使用正则表达式将“:”转换为“:”而不删除换行符

时间:2014-12-29 20:46:55

标签: javascript jquery regex

我正在尝试在textarea中使用正则表达式来删除或添加空格,这样每当它找到":"它将被转换为" :" (每边添加一个空格)。

我目前有以下代码,该代码适用于this regex site,但却给出了错误消息Uncaught SyntaxError: Invalid regular expression: /(?=\n)\s{0,}:\s{0,}(?<=\n)/: Invalid group

$('textarea[name="yaml"]').val(
  $('textarea[name="yaml"]').val().replace(/(?=\n)\s{0,}:\s{0,}(?<=\n)/ig,
    " : "));    

3 个答案:

答案 0 :(得分:2)

您遇到问题,因为\s匹配多种空格,包括您不想匹配的换行符。您看到错误,因为您正在使用您在浏览器中使用的js正则表达式引擎不支持的正则表达式功能。

要保留换行符,请尝试使用\x20代替\s,即匹配单词空间的确切字符,而不仅仅是通用空格。只需这样就足够了:

$('textarea[name="yaml"]').val(
  $('textarea[name="yaml"]').val().replace(/\x20*:\x20*/g, " : ")
);

然而要注意,任何正则表达式解决方案也可以替换YAML值中的真正“:”以及空格无关紧要的地方。我不知道这是不是你想要的。

答案 1 :(得分:1)

如下面的演示所示,string.replace(/:/g, ' : ')应该这样做:

&#13;
&#13;
var str = 'duufuduiure:0ee938:\ndjiedj\n\r:dhdhhiekd\r\ndjdfd;:';
$('pre.before').text( str );
$('pre.after').text( str.replace(/:/g, ' : ') );
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
before: <pre class="before"></pre>
after: <pre class="after"></pre>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果您还使用$多行标记,则可以使用m输入字符的结尾来帮助解决此问题。

var foo = "Hello world   : \nmore text here";
foo.replace(/\s*:\s*$/igm, ' : ');
/* console output: 
> "Hello world : 
> more text here"
*/