我正在尝试在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,
" : "));
答案 0 :(得分:2)
您遇到问题,因为\s
匹配多种空格,包括您不想匹配的换行符。您看到错误,因为您正在使用您在浏览器中使用的js正则表达式引擎不支持的正则表达式功能。
要保留换行符,请尝试使用\x20
代替\s
,即匹配单词空间的确切字符,而不仅仅是通用空格。只需这样就足够了:
$('textarea[name="yaml"]').val(
$('textarea[name="yaml"]').val().replace(/\x20*:\x20*/g, " : ")
);
然而要注意,任何正则表达式解决方案也可以替换YAML值中的真正“:”以及空格无关紧要的地方。我不知道这是不是你想要的。
答案 1 :(得分:1)
如下面的演示所示,string.replace(/:/g, ' : ')
应该这样做:
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;
答案 2 :(得分:0)
如果您还使用$
多行标记,则可以使用m
输入字符的结尾来帮助解决此问题。
var foo = "Hello world : \nmore text here";
foo.replace(/\s*:\s*$/igm, ' : ');
/* console output:
> "Hello world :
> more text here"
*/